Java stream groupingBy key作为最高薪水员工和值作为部门的所有员工

标签 java java-stream

我有一个 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>>其中映射键是每个部门的最高薪水员工,值是该部门的所有员工。 我正在尝试 groupingBy 但它为所有员工提供部门 map 。如何获取所有 max salary employee 作为 map key?

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

可能有更好、更有效的解决方案,如果我不在手机上,我可能已经用尽了所有这些想法。

关于Java stream groupingBy key作为最高薪水员工和值作为部门的所有员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62030049/

相关文章:

java - java中设备的自动网络发现

Java无效的流头问题

java - Collectors.groupingBy 基于嵌套静态类属性

java - 从 Java 8 中基于多个属性的对象列表中删除重复项

java - 收集/计数到非空 Map 会抛出 ClassCastException

java - 将 glCanvas 放置在包含按钮的 JPanel 旁边

java - 使用 REST assured 进行 JSON 验证

java - 使用 Jersey 进行客户端身份验证

java - 重用部分流映射和过滤来组成两个不同的结果

java - 使用 Java Streams 对嵌套对象进行分组和排序