Scala将包含Map的List转换为Map

10

我有一个简单的问题

我有一个像这样的Map列表

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

And I want the result like this

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

如果键值重复,它可以被覆盖。 有人可以帮我吗?
2个回答

16
你可以结合使用flattentoMap:
val list = List(Map("k1" -> "v1", "k2" -> "v2"))
list.flatten.toMap // Map(k1 -> v1, k2 -> v2)

flatten将把地图列表转换为元组列表,然后toMap将把您的元组列表转换为地图。


你确定吗?请确保所有映射中至少键的类型相同 - 例如,您必须只有Map [String,String]实例。 - Andrei T.
否则它确实无法编译。 - Andrei T.
为什么这是正确的答案?问题是将List(Map,Map)转换为Map,而不是List(Map)。这甚至在Scastie上都无法正常工作。从问题中获取列表,并尝试使用l.flatten进行操作,您将收到一个错误。 - Sven
好的,它可以编译。我从我正在使用的 Java 库中收到了 Java Map,这导致了错误。抱歉。 - Sven

7

您可以尝试使用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)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接