Scala 2.12 如何基于两个Map关联生成第三张目标Map
Scala 2.12 两个Map关联匹配实现方案
你可以直接使用flatMap实现需求,这是最简写法,会自动过滤匹配不到的条目:
val t1=Map("K1"->"tempV1" , "K2"->"tempV2" , "K3"-> "tempV3","K4"->"tempV4") val t2=Map("tempV1"->"V1" , "tempV2"->"V2" , "tempV3"-> "V3","someV4"->"V4") val result = t1.flatMap { case (k, v) => t2.get(v).map(k -> _) } // 输出:Map(K1 -> V1, K2 -> V2, K3 -> V3)
实现逻辑说明
t2.get(v)会根据t1的value在t2中查找对应的key,返回Option类型:匹配到对应值返回Some(目标值),匹配不到返回NoneflatMap会自动丢弃None条目,将Some包裹的元组直接收集为新的Map
其他可选写法
如果你偏好显式过滤的写法,可以用collect实现:
val result = t1.collect { case (k, v) if t2.contains(v) => k -> t2(v) }
如果需要保留t1所有key,匹配不到的给默认值,可以用map加getOrElse:
val result = t1.map { case (k, v) => k -> t2.getOrElse(v, "默认值") } // 输出:Map(K1 -> V1, K2 -> V2, K3 -> V3, K4 -> 默认值)
内容的提问来源于stack exchange,提问作者byomjan
相关产品推荐
相关产品推荐

