Scala конвертирует карту k -> (v1, v2) в одну пару ключ-значение - PullRequest
0 голосов
/ 18 октября 2018

Каким будет метод для выполнения следующей операции?

Преобразование карты K1->(v1,v2), K2->(v1,v2) в K1->v1,K1->v2,K2->v1,K2->V2

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Переход от Map[String,(String, String)] к List[Map[String,String]]:

val mss = Map("s"->("a","b"), "t"->("a","c"))

mss.toList.flatMap{case (k,(a,b)) => List((k,a),(k,b))}.map(Map(_))

Последний шаг превращения каждого кортежа результата в Map довольно бессмысленен.Какая польза от Map только с одной парой ключ -> значение?

0 голосов
/ 18 октября 2018

Сначала вы должны конвертировать Map в List или Seq (если вы хотите более общий тип), а затем вы можете использовать flatMap.Пример с toList:

val map = Map("a" -> ("1", "2"), "b" -> ("3", "4"))

map.toList.flatMap {
  case (k, (v1, v2)) => List(k -> v1, k -> v2)
}
// res0: List[(String, String)] = List((a,1), (a,2), (b,3), (b,4))

Сначала ваши значения отображаются в списках кортежей, поэтому промежуточный результат будет:

List(List((a,1), (a,2)), List((b,3), (b,4)))

, а затем выравнивает и вы получаете список кортежей:

List((a,1), (a,2), (b,3), (b,4))

...