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

Java 8 Lambda Stream如何提取订单列表中所有商品ID?

解决Java Stream获取所有订单商品ID列表的问题

嘿,这个问题我太熟悉了!你当前的写法用了普通的map操作,它会把每个订单对应的商品ID列表单独转成一个List<Integer>,最后得到的是List<List<Integer>>——也就是嵌套的二维列表,这显然不是你想要的所有商品ID的扁平列表。

正确实现方式:使用flatMap替代map

flatMap的作用就是把多个流“扁平化”合并成一个单一的流,刚好能解决这个嵌套列表的问题。具体代码如下:

import java.util.List;
import java.util.stream.Collectors;

// 假设你的Order和Goods类已经正确定义
List<Integer> allGoodsIds = list.stream()
    // 把每个订单的goodsList转换成商品流,然后合并成一个全局商品流
    .flatMap(order -> order.getGoodsList().stream())
    // 从每个商品中提取ID
    .map(goods -> goods.getId())
    // 收集成最终的ID列表
    .collect(Collectors.toList());

为什么原来的写法不对?

  • 普通map是一对一的转换:每个订单对象对应一个List<Integer>(该订单的商品ID列表),所以最终结果是嵌套的列表。
  • flatMap是一对多+扁平化:它先把每个订单转换成对应的商品流,再把所有这些小流合并成一个包含所有商品的大流,后续的map和收集操作都是在这个大流上进行,自然就能得到扁平的ID列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:40