我有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
使用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版本