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

Java使用Jackson解析嵌套对象后如何直接遍历深层嵌套列表?

嵌套集合扁平化遍历方案

可以通过Java 8及以上版本提供的Stream API实现,无需编写多层嵌套for循环,具体实现如下:

基础实现(假设中间层级属性均不为空)

如果你的实体类的dto、segments属性运行时不会为null,可以直接使用如下代码:

rootNode.visibleEntities.stream()
    .flatMap(v -> v.dto.segments.stream())
    .filter(s -> s.transfer != null)
    .forEach(s -> System.out.println(s.transfer.getName()));

如果你的实体类属性是私有字段,使用getter方法取值,对应调整为:

rootNode.getVisibleEntities().stream()
    .flatMap(visibleEntity -> visibleEntity.getDto().getSegments().stream())
    .filter(segment -> segment.getTransfer() != null)
    .forEach(segment -> System.out.println(segment.getTransfer().getName()));

实现说明

  • 核心通过flatMap操作完成嵌套集合扁平化:它会把每一个VisibleEntities实例对应的List<Segments>转换为独立的Segments元素流,再把所有流合并为单层的Segments流,直接消除了外层循环
  • 后续通过filter过滤掉transfer为null的元素,最终直接遍历输出即可

健壮性增强实现

如果运行时可能出现VisibleEntities为null、dto为null、segments为null的场景,可以增加空值过滤逻辑避免空指针异常:

import java.util.Objects;
import java.util.Collection;

// 省略其他代码
rootNode.getVisibleEntities().stream()
    .filter(Objects::nonNull)
    .map(VisibleEntities::getDto)
    .filter(Objects::nonNull)
    .map(Dto::getSegments)
    .filter(Objects::nonNull)
    .flatMap(Collection::stream)
    .filter(segment -> segment.getTransfer() != null)
    .forEach(segment -> System.out.println(segment.getTransfer().getName()));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 21:15:04