如何按值

时间:2018-04-29 11:12:46

标签: kotlin

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

data class Product(val name: String,
                   val maker: List<String>)

目前,我从后端收到的回复(并且无法更改)如下:

[{"name":"Car", "maker":["Audi"]},
 {"name":"Car", "maker":["BMW"]},
 {"name":"Motorcycle", "maker":["Yamaha"]},
 {"name":"Motorcycle", "maker":["Kawasaki"]}
]

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

[{"name":"Car", "maker":["Audi", "BMW"]},
 {"name":"Motorcycle", "maker":["Yamaha","Kawasaki"]}
]

1 个答案:

答案 0 :(得分:5)

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

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