如何使用Kotlin从List和内部列表中创建一个Map

所以我有这样的数据类:

data class Item(val name: String) data class Order(val id: Int, val items: List<Item>) 

我有一个订单清单。

我的问题是,如何使用Kotlin的集合API创建一个包含Item name作为键的映射和具有该Item的Orders列表作为值?

假设您有orders: List<Order> ,您可以首先将订单flatMapOrder和项目名称对(如果每个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 -> ... } }