【问题标题】:Remove element from List of Maps in Scala从 Scala 中的地图列表中删除元素
【发布时间】:2014-09-30 00:54:57
【问题描述】:

我有一个ListMap,每个都包含三个键/值对:

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 中以优雅的方式做到这一点?

【问题讨论】:

    标签: scala collections scala-collections


    【解决方案1】:

    你可以这样做:

    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")
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,这完全符合我的需要
      【解决方案3】:

      假设你的密钥是String:

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

      也就是说对于列表的每个元素(每个m: Map),1创建一个没有条目的副本,键为“key”(m - "key"),2 在第一个副本的基础上创建第二个副本,方法是在原始地图m (+ ("title" -> m))、3 和最后添加一个带有键“title”的新条目和带有键“value”的条目的值通过删除键“值”的条目(最终确定“重命名”:- "value"),创建将在新列表中发生的最终映射。

      【讨论】:

        【解决方案4】:

        我会选择这个

         val list = ... // your definition
        
         list map { 
           _ collect {
             case ("value", v) => "title" -> v
             case tpl @ (k, v) if k != "key" => tpl
           }
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-15
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 2017-12-15
          • 2020-09-27
          • 2017-03-05
          相关资源
          最近更新 更多