Scala比较两个列表并构建字符串

Curious_Bop

我有两个列表,如下所示:

输入栏:

List(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13)

输入数据:

List(
  Map(col2 -> dummy string, col7 -> 2016-01-01, col11 -> 2011-01-01),
  Map(col2 -> dummy string, col7 -> 2018-01-01, col11 -> 2018-01-01),
  Map(col2 -> dummy string, col7 -> 2018-04-01, col11 -> 2018-04-01),
  Map(col2 -> dummy string, col7 -> 2016-01-01, col11 -> 2016-01-01)
)

我想做的是在我都遍历它们两个之后生成一个字符串。因此,如果colX名称匹配,则在Map中为其提供值,否则为其提供NULL。

因此,在上面的示例中,我将循环4次,创建4个将返回的字符串:

(Null, dummy string, Null, Null, Null, Null,2016-01-01, Null) ..etc..

我想到开始如下。遍历输入列的列表,然后遍历输入数据的每个键,但是我觉得这是一个公平的方法。

inputColumns.foreach(column => {
    inputData.foreach{ case (k,v) =>
        // I get a constructor cannot be instantiated to expected type error
    }
})
安托

null在Scala中通常不鼓励使用,这就是为什么我建议将此映射到的原因List[Option[String]]这将允许从转换后的数据的功能调用中安全地受益。

因此,假设您具有以下初始值:

private val columns =
  List("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10", "col11", "col12", "col13")

private val input = List(
  Map("col2" -> "dummy string", "col7" -> "2016-01-01", "col11" -> "2011-01-01"),
  Map("col2" -> "dummy string", "col7" -> "2018-01-01", "col11" -> "2018-01-01"),
  Map("col2" -> "dummy string", "col7" -> "2018-04-01", "col11" -> "2018-04-01"),
  Map("col2" -> "dummy string", "col7" -> "2016-01-01", "col11" -> "2016-01-01")
)

我们可以将它们转换ListList[Option[String]],其中每个子列表都对应于原始列表Map

val rows = input.map(originalMap =>
  columns.map(column => originalMap.get(column))
)

每行看起来像

List(None, Some(dummy string), None, None, None, None, Some(2016-01-01), None, None, None, Some(2011-01-01), None, None)

如果仍然要使用空值:

val resultWithNulls = rows.map(row => row.map(_.getOrElse(null)))

给像这样的行:

List(null, "dummy string", null, null, null, null, "2016-01-01", null, null, null, "2011-01-01", null, null)

而且,如果要将可选内容转换为类似CSV的字符串,它仍然很简单:

val resultAsCsvString = rows.map(row => row.map(_.getOrElse("")).mkString(","))
// List(
//  ",dummy string,,,,,2016-01-01,,,,2011-01-01,,",
//  ",dummy string,,,,,2018-01-01,,,,2018-01-01,,",  ...
// )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章