【问题标题】:Retrieve data form inner list using java8 stream使用 java 8 流从内部列表中检索数据
【发布时间】:2026-01-29 09:55:02
【问题描述】:

我有员工列表,每个员工都有部门列表。我想在一个员工下获得列表部门。这是我的代码,

List<Employee> employeeList = new ArrayList<Employee>();
List<Department> departments = employeeList.stream().filter(x-> x.getEmployeeName().equals("XXX")).filter(y -> y.getDepartmets()).collect(Collectors.toList());

有人可以帮忙吗?

【问题讨论】:

    标签: java collections java-8 java-stream


    【解决方案1】:
    employeeList.stream()
                .filter(x -> "XXX".equals(x.getEmployeeName()))
                .findFirst()
                .map(Employee::getDepartmets)     
                .orElse(Collections.emptyList());
    

    按名称第一个filter 并找到第一个找到的。如果存在将其映射到这些部门,则生成一个空列表。

    【讨论】:

    • 效果很好。非常感谢您的回复。
    • 在自己尝试代码时也遇到过这样的实现,但让我感到困惑的一个问题是*为什么不使用Stream 而不是mapping 基于Optionalmap
    • @aruntheimperfect 如果有帮助,你可以accept 回答
    • @nullpointer 在这种情况下,这是一个选择问题。我似乎无法想到他们会表现不同的场景。 IMO 我赞成这种方法,因为findFirst 尽可能接近filter 操作,从而更容易弄清楚发生了什么。