java - Java流分组按键作为最高薪员工,将值作为部门的所有员工
问题描述
我有一个清单Employee
public class Employee {
private String name;
private Integer age;
private Double salary;
private Department department;
}
List<Employee> employeeList = Arrays.asList(
new Employee("Tom Jones", 45, 12000.00,Department.MARKETING),
new Employee("Harry Major", 26, 20000.00, Department.LEGAL),
new Employee("Ethan Hardy", 65, 30000.00, Department.LEGAL),
new Employee("Nancy Smith", 22, 15000.00, Department.MARKETING),
new Employee("Catherine Jones", 21, 18000.00, Department.HR),
new Employee("James Elliot", 58, 24000.00, Department.OPERATIONS),
new Employee("Frank Anthony", 55, 32000.00, Department.MARKETING),
new Employee("Michael Reeves", 40, 45000.00, Department.OPERATIONS));
我想获取Map<Employee, List<Employee>>
每个部门的最高薪水员工的地图键在哪里,价值是该部门的所有员工。我正在尝试分组,但它为所有员工提供了部门地图。如何将所有最高工资员工作为地图键?
Map<Department,List<Employee>> employeeMap
= employeeList.stream().collect(Collectors.groupingBy(Employee::getDepartment));
解决方案
您可以获得所需的结果,如下所示:
Map<Employee, List<Employee>> result = employees.stream()
.sorted(Comparator.comparingDouble(Employee::getSalary).reversed())
.collect(groupingBy(Employee::getDepartment, LinkedHashMap::new, toList())).values().stream()
.collect(toMap(l -> l.get(0), Function.identity()));
那里可能有更好,更有效的解决方案,如果我没有在手机上,我会用尽这些想法。
推荐阅读
- format - 如何在 LaTex 中使用 spreadtab 打印括号内的负数
- chapel - 赋值右侧的“for”和“forall”之间的区别
- ios - SwiftUI 如何设置下划线与文字的间距?
- git - 如何创建拉取请求或合并 PR
- python - python - 如何在python中使用cartopy绘制多边形而不是跨越日期线?
- command-line - 为什么安装 nativescript 会导致 tns 不被识别为 cmdlet 的名称?
- html - 如何使用 css 在卡片上叠加图像?
- c++builder - 禁用 TStringGrid 组件的鼠标滚轮,启用外框(VCL,C++ Builder)
- r - 如何对R中的不同组求和
- php - 我想计算没有降雨的天数?