【发布时间】:2020-07-01 15:14:10
【问题描述】:
我有以下员工数据列表,我需要根据员工部门对这些数据进行分组,然后我想找到每个部门中薪酬最高的 2 名员工。
public class Employee {
private int id;
private String name;
private String dept;
private int salary;
//setters and getters
}
List<Employee> listOfEmp = new ArrayList<>();
listOfEmp.add(new Employee (1, "A", "IT",100));
listOfEmp.add(new Employee (2, "B", "IT",200));
listOfEmp.add(new Employee (3, "C", "SUPPORT",100));
listOfEmp.add(new Employee (4, "D", "SUPPORT",200));
listOfEmp.add(new Employee (5, "E", "SUPPORT",300));
listOfEmp.add(new Employee (6, "F", "SUPPORT",400));
listOfEmp.add(new Employee (7, "G", "IT",500));
listOfEmp.add(new Employee (8, "H", "IT",600));
listOfEmp.add(new Employee (9, "I", "IT",700));
以下是我写给按部门分组员工的查询
Map<String, List<String>> departmentWiseEmployees = listOfEmp.stream().
collect(Collectors.groupingBy(Employee::getDept, Collectors.mapping(Employee::getName, toList())));
我正在尝试使用以下方法使用以下方法查找每个部门中薪酬最高的 2 名员工。但它是
int limit = 2;
Map<String, List<String>> groupByTeachers =
listOfEmp.stream()
.collect(
Collectors.groupingBy(
Employee::getDept,
Collectors.collectingAndThen(
Collectors.toList(),
e -> e.stream().sorted().limit(limit).collect(toList() ) ) ) );
这里编译器抱怨为collectingAndThen提供的lambda参数出现以下错误,它说e的类型是List<Employee>,但它必须是List<Object>
有人可以帮我理解这里出了什么问题吗?
【问题讨论】:
-
empList是如何定义的? -
List
listOfEmp = new ArrayList();
标签: java lambda java-8 java-stream