GroupBy и преобразовать карту на основе другой карты в Scala - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующая карта

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(
"m_type" -> List("mk1", "mk2", "mk3"),
"d_type" -> List("mk4", "mk5", "mk6", "mk7"),
"c_type" -> List()
)

1 Ответ

2 голосов
/ 19 июня 2020

Если ваш 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...