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

如何通过Streams在特定场景下获取List<List<D>>类型集合?

嗨,我懂你的需求了——你不是要把所有D元素合并成一个扁平列表,而是希望每个A实例对应的所有D元素各自组成一个独立的子列表,最终得到List<List<D>>类型的结果对吧?

你当前的代码之所以会得到单个List<D>,是因为连续的flatMap会把每一层集合都彻底扁平化:从A的B列表摊平,再摊平每个B的C列表,最后摊平每个C的D列表,所有D元素自然就被揉进同一个列表里了。

要实现你的目标,我们需要针对每个A单独处理其内部的D元素,先把每个A对应的所有D收集成一个List<D>,再把这些子列表汇总起来。具体代码调整如下:

List<List<D>> targetList = listA.stream()
    // 对每个A,收集它所有层级的D元素为一个List<D>
    .map(a -> a.getB().stream()
        .flatMap(b -> b.getC().stream())
        .flatMap(c -> c.getD().stream())
        .collect(Collectors.toList()))
    // 把所有A对应的List<D>收集成最终的List<List<D>>
    .collect(Collectors.toList());

代码细节说明:

  • 外层使用map操作:每个A对象都会被转换为一个包含其所有D元素的List<D>
  • 内层的连续flatMap负责处理单个A内部的层级结构:把B列表→C列表→D列表逐层扁平化,最终收集为单个List<D>
  • 另外你原来的代码里getB.stream()这类写法少了括号,正确的调用应该是getB().stream()(因为getter是方法,需要执行调用),上面的代码已经修正了这个细节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:38