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

如何在Kotlin中无循环将List<ProductDetail>转为嵌套Map?

解决方法

你可以通过Kotlin标准库的groupBy配合mapValues和associateBy实现需求,完全不需要手动编写循环:

假设你希望外层Map的key是ProductDetail的name字段,内层Map的key是price字段,代码示例如下:

val productList: List<ProductDetail> = // 你的产品列表
val nestedMap: Map<String, Map<Int, ProductDetail>> = productList
    .groupBy { it.name } // 第一步:按name分组,得到Map<String, List<ProductDetail>>
    .mapValues { (_, productGroup) -> 
        productGroup.associateBy { it.price } // 第二步:将每个分组转为以price为key的Map
    }

说明:

  1. groupBy会自动将列表按指定的String字段(这里是name)分组,生成外层Map结构,key为分组字段值,value为对应分组的产品列表。
  2. mapValues遍历外层Map的每个值(即每个产品分组),将其转换为内层Map;associateBy则把分组内的每个产品映射为以指定Int字段(这里是price)为key、产品本身为value的键值对。

如果你的分组字段或内层key字段不是name和price,只需替换lambda表达式中的字段即可。

另外需要注意:如果同一个分组内存在多个price相同的产品,associateBy会保留最后一个出现的产品。如果需要处理重复key的场景,可以改用groupBy作为内层转换(得到Map<String, Map<Int, List<ProductDetail>>>),或者根据业务需求自定义处理逻辑。

内容的提问来源于stack exchange,提问作者rohit27kr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:05:23