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

如何使用Java Stream将对象列表转换为对象映射?

用Java Stream实现列表到映射的转换

原代码的核心逻辑是以订单ID为键构建OrderData对象的映射,规则如下:

  • 若映射中无对应订单ID,直接存入当前订单
  • 若映射中已有对应订单ID,仅当当前订单的文件列表不为空时,用当前订单覆盖原有值

用Java Stream结合Collectors.toMap可以实现完全等价的逻辑,代码如下:

List<OrderData> orderList = getOrderList();
Map<String, OrderData> orders = orderList.stream()
    .collect(Collectors.toMap(
        OrderData::getOrderID,
        Function.identity(), // 等价于order -> order,直接使用当前订单作为value
        (existing, newOrder) -> newOrder.getFiles().isEmpty() ? existing : newOrder
    ));

逻辑说明

  • Collectors.toMap的第一个参数指定映射的key提取规则(订单ID)
  • 第二个参数指定映射的value(直接使用订单对象本身,Function.identity()是order -> order的简写)
  • 第三个参数是key冲突合并函数:当遇到重复订单ID时,判断新订单的文件列表是否为空,非空则用新订单覆盖原有值,否则保留原有订单,和原代码逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:03