首页 > 解决方案 > 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));

标签: javajava-stream

解决方案


您可以获得所需的结果,如下所示:

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()));

那里可能有更好,更有效的解决方案,如果我没有在手机上,我会用尽这些想法。


推荐阅读