所以我有这样的数据类:
éàè
我有一份订单清单。
我的问题是,如何使用Kotlin的集合API创建一个带有项目名称作为键的地图和带有该项目作为值的订单列表?
答案 0 :(得分:7)
假设您有orders: List<Order>
,您可以先将flatMap
个订单分成Order
和项目名称对(这样每个Order
可以多次出现,如果有的话多个Item
),然后使用groupBy
按项目名称对这些对进行分组,将成对的订单分组:
val result = orders
.flatMap { o -> o.items.map { i -> o to i.name } }
.groupBy({ (_, name) -> name }, valueTransform = { (o, _) -> o })
在groupBy
参数中,{ (_, name) -> name }
是分组键选择器函数,它从每对中获取名称,{ (o, _) -> o }
在将项目收集到列表时转换项目,这需要订单中的订单。
如果您希望消除同一Order
多次出现多次Item
,请多次使用distinct
:.flatMap { o -> o.items.distinct().map { i -> ... } }