【问题标题】:scala convert List of map to mapscala将地图列表转换为地图
【发布时间】:2017-03-09 09:06:11
【问题描述】:

我有一个简单的问题

我有这样的地图列表

List(
      Map("a" -> "a"),
      Map("b" -> "b")
    )

我想要这样的结果

Map(
  "a"->"a",
  "b"->"b"
)

如果key是重复的,可以覆盖 有谁请帮帮我

【问题讨论】:

    标签: scala


    【解决方案1】:

    你可以结合flattentoMap

    val list = List(Map("k1" -> "v1", "k2" -> "v2"))
    list.flatten.toMap // Map(k1 -> v1, k2 -> v2)
    

    flatten 会将映射列表转换为元组列表,然后toMap 会将您的元组列表转换为映射。

    【讨论】:

    • 你确定吗?只需确保至少键在所有映射中具有相同的类型 - 例如,您必须只有 Map[String, String] 实例。
    • 否则确实无法编译。
    【解决方案2】:

    你可以尝试使用reduce:

    scala> val list = List(Map("k1" -> "v1", "k2" -> "v2"))
    list: List[scala.collection.immutable.Map[String,String]] = List(Map(k1 -> v1, k2 -> v2))
    
    scala> list.reduce(_ ++ _)
    res0: scala.collection.immutable.Map[String,String] = Map(k1 -> v1, k2 -> v2)
    
    scala> val list = List(Map("k1" -> "v1"), Map("k2" -> "v2"))
    list: List[scala.collection.immutable.Map[String,String]] = List(Map(k1 -> v1), Map(k2 -> v2))
    
    scala> list.reduce(_ ++ _)
    res1: scala.collection.immutable.Map[String,String] = Map(k1 -> v1, k2 -> v2)
    

    这样您就不需要转换为任何中间数据类型。

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 2015-07-10
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2011-11-01
      相关资源
      最近更新 更多