Как @Luis Miguel Mejía Suárez сказал, что это в основном что-то вроде
val maps = Map(k1 -> List(Map(k2 -> v2)))
def flattenMaps[K, V]: List[Map[K, V]] => Map[K, V] = ???
maps.mapValues(flattenMaps).toMap
Дьявол кроется в деталях вашей логики сплющивания c:
// assumes that list always of size 1, loses random elements if bigger, blows up if size=0
def flattenMaps[K, V]: List[Map[K, V]] => Map[K, V] = _.head
// last wins
def flattenMaps[K, V]: List[Map[K, V]] => Map[K, V] = _.foldLeft(Map.empty[K, V]) {
(bigMap, map) => bigMap ++ map
}
// first wins
def flattenMaps[K, V]: List[Map[K, V]] => Map[K, V] = _.foldLeft(Map.empty[K, V]) {
(bigMap, map) => map ++ bigMap
}
// if you want to optimize for some reason, you can use builder instead
def flattenMaps[K, V]: List[Map[K, V]] => Map[K, V] = _.foldLeft(Map.newBuilder[K, V]) {
(builder, map) =>
builder ++= map
builder
}.result
// or basically any other logic that makes sense and is defined for any input that type-checks
Вы должны определить некоторое правильное поведение в случае, если в вашем списке будет более одного элемента (или его нет), иначе вы однажды удивитесь, если забудете о своих предположениях.