在Scala中相交和合并/连接两个贴图

在Scala中相交和合并/连接两个贴图,scala,Scala,假设我有两张类似这样的地图 val m1 = Map(1 -> "One", 2 -> "Two", 3 -> "Three") val m2 = Map(2 -> 2.0, 3 -> 3.0, 4 -> 4.0) Map(2 -> (Two,2.0), 3 -> (Three,3.0)) 我希望基于键获得交集,并返回表示合并值的元组。结果是这样的 val m1 = Map(1 -> "One", 2 -> "Two", 3 -&g

假设我有两张类似这样的地图

val m1 = Map(1 -> "One", 2 -> "Two", 3 -> "Three")
val m2 = Map(2 -> 2.0, 3 -> 3.0, 4 -> 4.0)
Map(2 -> (Two,2.0), 3 -> (Three,3.0))
我希望基于键获得交集,并返回表示合并值的元组。结果是这样的

val m1 = Map(1 -> "One", 2 -> "Two", 3 -> "Three")
val m2 = Map(2 -> 2.0, 3 -> 3.0, 4 -> 4.0)
Map(2 -> (Two,2.0), 3 -> (Three,3.0))
我想我可以采取类似的办法

val merged = m1 collect {
  case (key, value) if m2.contains(key) => key -> (value, m2(key))
}
但是没有“更惯用”的方法来做到这一点吗?我的直觉与我通过
Set

val merged = m1.intersect(m2)

获取键的交点,然后将它们映射到一个新的
map

m1
m2
转换为
列表
,并连接起来。然后按键分组并根据需要转换结果

val allList = m1.toList ++ m2.toList
val grouped = allList.groupBy(_._1)
val result = grouped.mapValues(lst => lst.map(_._2))

好吧,那个解决方案就在我的脸上出现了!:-)我想知道性能是否与
collect
变体有很大不同。