将两个地图合并为一个序列标量

时间:2018-05-18 20:55:37

标签: scala

我有两张地图如下

Map("x" -> Seq("abc"), "z" -> Seq("ghj")) and Map("y" -> Seq("xyz"), "z" -> Seq("pqr"))

我想要的输出是将这两个映射组合成一个序列,这样两个映射中存在的键应该有两个非空序列,而只有一个映射中存在的键应该得到相应的Seq和一个空的Seq。 / p>

Seq(("x", Seq("abc"), Seq()), ("y", Seq(), Seq("xyz")), ("z", Seq("ghj"), Seq("pqr"))

2 个答案:

答案 0 :(得分:3)

以下是一种方法:

val result = (m1.keySet ++ m2.keySet).map {
  k: String => (k, m1.getOrElse(k, Seq()), m2.getOrElse(k, Seq()))
}

答案 1 :(得分:0)

这是我丑陋的解决方案。

val res1 = map1.map { case (k, v) => if (map2.contains(k)) (k, v, map2(k)) else (k, v, Seq()) }
val res2 = map2.filter { case (k, _) => !map1.contains(k) }.map { case (k, v) => (k, Seq(), v) }
val res3 = res1 ++ res2
res3.toList.sortBy(_._1)