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

Java Stream分组时如何映射元素返回Map<Long, List<String>>

实现方案

直接使用Collectors.groupingBy的重载方法,搭配下游映射收集器即可一步得到目标结构,无需先分组实体再做二次转换,执行效率更高。
核心逻辑:

  • 分组键保持原有逻辑,取RCouponDetailEntity的rCouponId字段
  • 分组后对每组的元素做映射,提取code字段值,再将提取出的字符串收集为List<String>

完整实现代码:

Map<Long, List<String>> couponIdToCodesMap = rCouponDetailDAO.getAllDetailsByCouponId(couponIds)
        .stream()
        .collect(Collectors.groupingBy(
                RCouponDetailEntity::getRCouponId,
                Collectors.mapping(RCouponDetailEntity::getCode, Collectors.toList())
        ));

如果你是基于已经生成的Map<Long, List<RCouponDetail>>类型的details变量做二次转换,可以用以下写法:

Map<Long, List<String>> couponIdToCodesMap = details.entrySet()
        .stream()
        .collect(Collectors.toMap(
                Map.Entry::getKey,
                entry -> entry.getValue()
                        .stream()
                        .map(RCouponDetail::getCode)
                        .collect(Collectors.toList())
        ));

注意:上述代码默认getCode()方法返回String类型,和目标集合的泛型匹配,如果你的code字段是其他类型,调整对应泛型即可。优先推荐第一种一步写法,减少中间集合创建,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:42:17