Kotlin如何使用groupBy从嵌套复杂结构构造Map<ReminderType, List<Promotion>>
正确实现代码
val result: Map<ReminderType, List<Promotion>> = promotions .flatMap { promotion -> // 提取当前Promotion下所有优惠券的提醒类型,去重避免同一个Promotion重复加入列表 promotion.coupons.map { it.reminderType }.distinct() .map { reminderType -> reminderType to promotion } } // 按提醒类型分组,值为对应的Promotion列表 .groupBy(keySelector = { it.first }, valueTransform = { it.second })
原代码问题说明
你编写的代码存在两个核心问题:
- 外层
promotions.map返回的是List<Map<ReminderType, List<Coupon>>>类型,和预期的返回类型完全不匹配 - 仅实现了单个Promotion内部的Coupon按提醒类型分组,没有完成跨Promotion的同类型数据归集,也没有将分组值从Coupon转换为所属的Promotion对象
逻辑说明
- 先用
flatMap把嵌套结构打平,得到所有「提醒类型-所属Promotion」的键值对 - 对单个Promotion下的重复提醒类型做去重,避免同一个Promotion在同一提醒类型的列表中多次出现
- 最后调用
groupBy按提醒类型分组,直接提取对应Promotion作为值即可得到目标结果
内容的提问来源于stack exchange,提问作者user572490
相关产品推荐
相关产品推荐

