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
相关产品推荐
相关产品推荐

