从Scala中的地图列表中删除元素

时间:2014-08-06 22:36:16

标签: scala collections scala-collections

我有List Map,每个都包含三个键/值对:

List(
  Map("id" -> 1, "key" -> 11, "value" -> 111), 
  Map("id" -> 2, "key" -> 22, "value" -> 222), 
  Map("id" -> 3, "key" -> 33, "value" -> 333), 
  Map("id" -> 4, "key" -> 44, "value" -> 444))

我想将其转换为JSON,但在此之前,我需要从每个地图中删除key及其值,并将value键重命名为title。如何以优雅的方式在Scala中完成?

4 个答案:

答案 0 :(得分:6)

你可以这样做:

val m1 = Map("id" -> 1, "key" -> 2, "value" -> 3)
val m2 = m1 - "key"  // Map(id -> 1, value -> 3)
val m3 = m2 + ("title" -> m2("value")) - "value"
// Map(id -> 1, title -> 3)

所以,对于整个列表:

list.map(m => m + ("title" -> m("value")) - "value" - "key")

答案 1 :(得分:3)

重新定义给定的地图列表的类似方法,它获取感兴趣的值(忽略其余的),

mapsList.map { m => Map( "id" -> m("id"), "title" -> m("value") )}

答案 2 :(得分:2)

假设你的密钥是String

listOfMap map { m => (m - "key") + ("title" -> m("value")) - "value" }

对于列表中的每个元素(每个m: Map), 1 创建一个没有条目的副本“key”(m - "key"), 2 根据第一个副本创建第二个副本,方法是在原始地图m+ ("title" -> m)), 3 最后通过删除关键“值”的条目来创建将在新列表中发生的最终地图(最终确定'重命名':- "value")。

答案 3 :(得分:1)

我选择

 val list = ... // your definition

 list map { 
   _ collect {
     case ("value", v) => "title" -> v
     case tpl @ (k, v) if k != "key" => tpl
   }
 }
相关问题