Scala:合并键上的两个不可变映射,并获得相同类型的新不可变映射

Scala:合并键上的两个不可变映射,并获得相同类型的新不可变映射,scala,dictionary,merge,key,seq,Scala,Dictionary,Merge,Key,Seq,我想在以下类型的同一个键上合并两个不可变映射: scala.collection.immutable.HashMap[String,Seq[String]] 和返回类型也应相同: scala.collection.immutable.HashMap[String,Seq[String]] 例如: scala> map2 res17: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(va

我想在以下类型的同一个键上合并两个不可变映射:

scala.collection.immutable.HashMap[String,Seq[String]]

和返回类型也应相同: scala.collection.immutable.HashMap[String,Seq[String]]

例如:

scala> map2
res17: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-2), key2 -> List(value2))

scala> map3
res18: scala.collection.immutable.HashMap[String,Seq[String]] = Map(key1 -> List(value1-3), key3 -> List(value3))


merging above two map should be output to:

Map(key1->List(value1-2,value1-3), key2->List(value2), key3->List(value3))

注意:返回的映射应该有一个Seq of String作为值,而不是Seq of Seq of String

您可以像这样合并两个映射:

map2 ++ map3.map{ case (k,v) => k -> (v ++ map2.getOrElse(k,Nil)) }

由于
++
运算符是不可变的,因此将创建一个新的
映射。

是的,肯定是重复的。scalaz对这个问题的回答甚至更好,因为它实际上就是
map2 |+| map3
感谢R.Fossati的及时帮助。。我正从Java背景迁移到Scala,因为Scala有非常独特的语法和速记,所以我面临着困难。。。