You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:39:02