gpt4 book ai didi

Java 8 流式重构 - List 到 Map>

转载 作者:行者123 更新时间:2023-12-02 02:30:22 25 4
gpt4 key购买 nike

我正在尝试将列表转换为 map 。

列表将类似于

List<Employee> employeesList = new ArrayList<>();

我希望将其转换为 map ,例如,

Map<String, List<RetiredEmployee>> empsMap = new HashMap<>();

这里,键是员工姓名,对象是包含员工的 RetiredEmployee。

class RetiredEmployee {

private final Employee employee;
private final Optional<LocalDateTime> empJoinTime;

RetiredEmployee(final Employee employee) {
this.employee = employee;
this.empJoinTime = getEmpJoinTime(employee);
}
}

以下代码适用于,

List<Employee> to Map<String, List<Employee>>

employeesList.stream().collect(Collectors.groupingBy(Employee::getName));

但不确定,如何将此员工转换为此分组内的新退休员工(员工)或进一步流式传输。

此外,我需要列表中最后一个员工 ID。是否也可以将其包含在流媒体中?

此外,希望对入职时间已知或存在的员工应用过滤器。

谢谢

最佳答案

我可以想到两个选择。一种是使用Collectors.mapping()来转换值:

employeesList.stream()
.collect(Collectors.groupingBy(Employee::getName,
Collectors.mapping(RetiredEmployee::new, Collectors.toList())))

使用 Java 9,您可以输入 filtering()收集器排除没有加入时间的员工。

或者您可以将流映射到RetiredEmployee,然后间接提取名称。这使得添加加入时间过滤器变得更加容易:

employeesList.stream()
.map(RetiredEmployee::new)
.filter(e -> e.getEmpJoinTime().isPresent())
.collect(Collectors.groupingBy(e -> e.getEmployee().getName()))

至于从列表中获取最后一个员工,我没有看到困难,或者它与流有何关系。只需使用employeesList.get(employeesList.size() - 1)

关于Java 8 流式重构 - List<ObjA> 到 Map<String, List<ObjB>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com