如何合并Keys上的Maps并合并其值scala

AJm*_*AJm 0 scala

我有2张地图:

val map1 = Map("col_1" -> "data_1", "col_2" -> "data_2", "col_3" -> "data_3")
val map2 = Map("col_1" -> "myval_1", "col_2" -> "myval_2", "col_3" -> "myval_3")
Run Code Online (Sandbox Code Playgroud)

要求输出:

res = Map("col_1" -> ("data_1", "myval_1"), "col_2" -> ("data_2", "myval_2"),
"col_2" -> ("data_2", "myval_2") )
Run Code Online (Sandbox Code Playgroud)

基本上保持'map1'的键并合并两个映射的值输出必须是元组而不是List或Seq

Ole*_*cov 6

使用map(如果其他地图上缺少某个键,则抛出):

val res = map1.map { case (k, v) => (k, (v, map2(k))) }
Run Code Online (Sandbox Code Playgroud)

或者使用collect(跳过两个地图中不存在的键):

val res = map1.collect { case (k, v) if map2.contains(k) => (k, (v, map2(k))) }
Run Code Online (Sandbox Code Playgroud)

或者使用默认值map2:

val res = map1.map { case (k, v) => (k, (v, map2.getOrElse(k, ""))) }
Run Code Online (Sandbox Code Playgroud)

对于对称的情况,我会从我的其他答案中使用Scalaz版本