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

Java Spring Boot中如何从列表对象中获取嵌套ArrayList的全部值

问题原因

你当前的代码只能拿到第一个元素的employee列表,核心问题是代码中使用了findFirst()方法,只会取流中的第一个元素,自然只能拿到第一个EmployeeDetails实例对应的employee属性值。


实现方案

首先请确保EmployeeDetails类中已为employee属性生成public的getter方法:public List<EmployeeDetails> getEmployee(),否则无法正常读取属性值。

根据你的需求可选择两种实现场景:

场景1:仅提取传入集合中所有元素的一级employee列表

仅合并当前传入列表中每个元素的employee属性列表,不递归提取子层级的内容:

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

public List<EmployeeDetails> printEmployeeDetails(List<EmployeeDetails> data) {
    return data.stream()
            // 过滤空元素避免空指针
            .filter(Objects::nonNull)
            // 取出每个元素的employee属性,空值替换为空列表避免空指针
            .map(emp -> emp.getEmployee() == null ? new ArrayList<>() : emp.getEmployee())
            // 把多个列表扁平化为单个元素流
            .flatMap(List::stream)
            // 收集为总列表返回
            .collect(Collectors.toList());
}

场景2:递归提取所有层级的employee(全量提取嵌套结构)

由于EmployeeDetails是嵌套的树形结构,如果需要提取所有子层级、孙子层级的全部EmployeeDetails实例,可以用递归实现:

public List<EmployeeDetails> printAllEmployeeDetails(List<EmployeeDetails> data) {
    List<EmployeeDetails> result = new ArrayList<>();
    if (data == null || data.isEmpty()) {
        return result;
    }
    for (EmployeeDetails emp : data) {
        if (emp == null || emp.getEmployee() == null) {
            continue;
        }
        // 加入当前层级的子元素
        result.addAll(emp.getEmployee());
        // 递归加入所有下级子元素
        result.addAll(printAllEmployeeDetails(emp.getEmployee()));
    }
    return result;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:24:03