如何在 Scala 中转换 List[Map[String, String]]
How to transform a List[Map[String, String]] in Scala
我有一个 Scala List
of Map[String, String]
这样的:
val data: List[Map[String, String]] = List(Map("key" -> "123", "fname" -> "Alice", "lname" -> "Baker"), Map("key" -> "456", "fname" -> "Bob", "lname" -> "Lotts"))
我想将其转换为 List
,如下所示:List(Map(id -> 123, name -> Alice Baker), Map(id -> 456, name -> Bob Lotts))
。基本上,我需要将 key
更改为 id
并将 fname
和 lname
连接到 name
.
我尝试了下面的代码。它有效,但我相信应该有更好的方法来做到这一点。谁能推荐一下?
val modData: List[Map[String, String]] = data.map(d => Map("id" -> d.getOrElse("key", ""), "name" -> s"${d.getOrElse("fname", "")} ${d.getOrElse("lname", "")}"))
我会分步进行,并使用地图的默认值以使其更具可读性:
val keys = Seq("key", "fname", "lname")
list.iterator
.map(_.withDefault(_ => ""))
.map(keys.map)
.collect { case Seq(id, fname, lname) => Map("id" -> id, "name" -> s"$fname $lname") }
.toList
我有一个 Scala List
of Map[String, String]
这样的:
val data: List[Map[String, String]] = List(Map("key" -> "123", "fname" -> "Alice", "lname" -> "Baker"), Map("key" -> "456", "fname" -> "Bob", "lname" -> "Lotts"))
我想将其转换为 List
,如下所示:List(Map(id -> 123, name -> Alice Baker), Map(id -> 456, name -> Bob Lotts))
。基本上,我需要将 key
更改为 id
并将 fname
和 lname
连接到 name
.
我尝试了下面的代码。它有效,但我相信应该有更好的方法来做到这一点。谁能推荐一下?
val modData: List[Map[String, String]] = data.map(d => Map("id" -> d.getOrElse("key", ""), "name" -> s"${d.getOrElse("fname", "")} ${d.getOrElse("lname", "")}"))
我会分步进行,并使用地图的默认值以使其更具可读性:
val keys = Seq("key", "fname", "lname")
list.iterator
.map(_.withDefault(_ => ""))
.map(keys.map)
.collect { case Seq(id, fname, lname) => Map("id" -> id, "name" -> s"$fname $lname") }
.toList