首页 > 解决方案 > GroupBy 并根据 Scala 中的另一个地图转换地图

问题描述

我有一张地图如下

val typeMap = Map(
"mk1" -> "m",
"mk2" -> "m1",
"mk3" -> "m2",
"mk4" -> "d",
"mk5" -> "d2",
"mk6" -> "d2",
"mk7" -> "d3",
"mk8" -> "f4"
)

我有另一个定义组条件的地图

val groupMap = Map(
"m_type" -> List("m", "m1", "m2"),
"d_type" -> List("d", "d2", "d3"),
"c_type" -> List("c","c1")
)

我需要使用 groupMap 中的条件来选择 typeMap 的键,其值映射到 groupMap 中的类型以获取新的 Map 如下

Map(
"m_type" -> List("mk1", "mk2", "mk3"),
"d_type" -> List("mk4", "mk5", "mk6", "mk7"),
"c_type" -> List()
)

标签: scala

解决方案


如果groupMap保证您在所有列表中只有唯一值,您可以创建一个反向映射并使用它按typeMap值分组:

val reverseGroupMap = groupMap.flatMap{case (key, value) => value.map(_ -> key)}

typeMap
  .groupBy{case (key, value) =>  reverseGroupMap(value)}
  .map{case (sec, map) => sec -> map.values.toList}

推荐阅读