斯卡拉:合并对密钥的两个不可改变的地图和获得新的不可变的映射与同类型
问题描述:
我想下面的类型相同的密钥合并两个不可改变的地图:斯卡拉:合并对密钥的两个不可改变的地图和获得新的不可变的映射与同类型
scala.collection.immutable.HashMap [字符串,序列[字符串]
和返回类型也应该是相同的: scala.collection.immutable.HashMap [字符串,SEQ [字符串]]
例如:
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))
注:返回的映射应该有字符串的序列作为值不串
的序列的序列
答
您可以合并两个地图是这样的:
map2 ++ map3.map{ case (k,v) => k -> (v ++ map2.getOrElse(k,Nil)) }
因为++
运营商是不可变的,一个新的Map
会创建。
+0
感谢R. Fossati提供的帮助..我正在从Java背景转向Scala并面临困难时期,因为Scala具有相当不同的语法和简洁性...... –
是的,肯定是重复的。关于这个问题的斯卡拉答案甚至更好,因为它实际上只是'map2 | + | map3' –