Я хотел бы преобразовать карту типа String -> List[String]
в Scala таким образом, чтобы каждая пара (k, (List v1, v2, ... vn))
ключ-значение приводила к парам {(k:v1, k), (k:v2, k), ... (k:vn, k)}
.
Например, я хотел бы преобразовать
scala.collection.immutable.Map[String,List[String]] = Map(A -> List(a1, a2), B -> List(b1))
до
scala.collection.immutable.Map[String,List[String]] = Map(A:a1 -> A, A:a2 -> A, B:b1 -> B)
Я смог частично достичь своей цели, используя [этот ответ] [1]:
scala> val schema = Map("A" -> List("a1", "a2"), "B" -> List("b1"))
schema: scala.collection.immutable.Map[String,List[String]] = Map(A -> List(a1, a2), B -> List(b1))
scala> schema flatten {case(k, vs) => vs.map((_, k))}
res1: scala.collection.immutable.Iterable[(String, String)] = List((a1,A), (a2,A), (b1,B))
Когда я пытаюсь предвосхититьИсходный ключ и двоеточие для каждого значения, я получаю сообщение об ошибке:
scala> schema flatten {case(k, vs) => vs.map((k.concat(":").concat(_), k))}
<console>:13: error: type mismatch;
found : (String => String, String)
required: String => ?
schema flatten {case(k, vs) => vs.map((k.concat(":").concat(_), k))}