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

如何使用Java Stream处理Employee列表获取所有员工及下属的姓名

实现方案

你现有代码只处理了顶层Employee节点,没有递归遍历每个员工的reportingEmp下属列表,所以需要先把所有层级的员工节点扁平化,再提取姓名。

步骤1:给Employee类补充Getter方法

首先要确保能访问Employee的私有属性,给类添加对应的Getter:

class Employee {
    private String name;
    private String id;
    private List<Employee> reportingEmp;

    public String getName() { return name; }
    public List<Employee> getReportingEmp() { return reportingEmp; }
}

步骤2:编写递归扁平化的辅助方法

写一个方法将单个Employee及其所有下属展开为Stream:

// 放在你调用Stream的同一个类里即可
private Stream<Employee> flattenEmployee(Employee emp) {
    // 无下属时直接返回当前员工
    if (emp.getReportingEmp() == null || emp.getReportingEmp().isEmpty()) {
        return Stream.of(emp);
    }
    // 拼接当前员工 + 所有下属递归展开的结果
    return Stream.concat(
        Stream.of(emp),
        emp.getReportingEmp().stream().flatMap(this::flattenEmployee)
    );
}

步骤3:修改Stream代码

用flatMap调用上面的辅助方法展开所有员工,再提取姓名:

import java.util.stream.Collectors;

// 你的原有emp是顶层员工List
List<String> names = emp.stream()
        .flatMap(this::flattenEmployee)
        .map(Employee::getName)
        .collect(Collectors.toList());

效果验证

最终输出的names列表顺序完全符合你的预期:

John
Mark
Mike
Lindsey
Steve
Andrew

哪怕你的员工层级更深(比如下属还有自己的下属),这个方案也能自动递归拉取所有员工的姓名,不需要修改逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:57:00