Kotlin - 从地图列表,到按键分组的地图

Vin*_*t F 5 kotlin

我有一个List<Map<Branch,Pair<String, Any>>>我想在单个Map<Branch,List<Pair<String, Any>>>.

因此,如果我有一个只有 2 个元素的初始列表:

列表

1. branch1 -> Pair(key1,value1)

   branch2 -> Pair(key2,value2)


2. branch1 -> Pair(key1a,value1a)
Run Code Online (Sandbox Code Playgroud)

我想结束:

地图

branch1 -> Pair(key1,value1)

           Pair(key1a,value1a)

branch2 -> Pair(key2,value2)
Run Code Online (Sandbox Code Playgroud)

所以一种 gr​​oupBy,使用初始嵌套映射中键的所有值..

我试过

list.groupBy{it-> it.keys.first()} 
Run Code Online (Sandbox Code Playgroud)

但显然它不起作用,因为它只使用第一个键。我想要相同的,但使用所有键作为单独的值。

在 Kotlin 中这样做最惯用的方法是什么?我有一个丑陋的 Java 工作版本,但我很确定 Kotlin 有一个很好的方法。只是到目前为止我还没有找到它!

任何的想法 ?

谢谢

Rol*_*and 10

下列:

val result =
    listOfMaps.asSequence()
        .flatMap {
          it.asSequence()
        }.groupBy({ it.key }, { it.value })
Run Code Online (Sandbox Code Playgroud)

将为您提供包含您请求的内容result的类型Map<Branch,List<Pair<String, Any>>>


小智 8

val list: List<Map<Branch, Pair<String, Any>>> = listOf() 
val map = list
    .flatMap { it.entries }
    .groupBy { it.key }
    .mapValues { entry -> entry.value.map { it.value } }
Run Code Online (Sandbox Code Playgroud)