如何按值对对象进行分组

Mar*_*jan 3 kotlin

我有一个看起来像这样的对象:

data class Product(val name: String,
                   val maker: List<String>)
Run Code Online (Sandbox Code Playgroud)

目前,我从后端收到的响应(无法更改)如下:

[{"name":"Car", "maker":["Audi"]},
 {"name":"Car", "maker":["BMW"]},
 {"name":"Motorcycle", "maker":["Yamaha"]},
 {"name":"Motorcycle", "maker":["Kawasaki"]}
]
Run Code Online (Sandbox Code Playgroud)

实际列表包含大量数据,但name可以信任该字段进行分组.我可以用什么方式映射这些数据,以便最终结果是这样的:

[{"name":"Car", "maker":["Audi", "BMW"]},
 {"name":"Motorcycle", "maker":["Yamaha","Kawasaki"]}
]
Run Code Online (Sandbox Code Playgroud)

hot*_*key 7

只需使用groupBy { ... }然后处理组映射条目,将其替换为单个Product:

val result = products.groupBy { it.name }.entries.map { (name, group) ->
    Product(name, group.flatMap { it.maker })
}
Run Code Online (Sandbox Code Playgroud)