我将有一个 Employee 列表,其中包含 3 个属性 - DepartmentId、employeeId、employeeGroup。
我想对部门 ID 和员工 ID 执行分组。这个想法是发送所属部门的员工的组名。以下是 3 种可能的情况:
案例#1:同一部门、不同员工、不同组。
["Dept001", 100, "Admin"]
["Dept001", 101, "Contrator"]
案例#2:同一部门、同一员工、不同组
["Dept001", 100, "Admin"]
["Dept001", 100, "Contrator"]
案例#3:不同的部门、不同的员工、同一组。
["Dept001", 100, "Admin"]
["Dept002", 101, "Admin"]
我尝试过以下方法:
Map<String, Set<Employee>> map = new TreeMap<>();
map = myList.stream().collect(Collectors.groupingBy(Employee::getDepartmentId,
Collectors.toSet()));
最佳答案
按多个字段分组将需要多次调用 Collectors#groupingBy
。幸运的是,重载的第二个参数Collectors#groupingBy
方法是另一种Collector
,因此只需调用两次即可。
Map<String, Map<Integer, Set<Employee>>> map = myList.stream()
.collect(Collectors.groupingBy(Employee::getDepartmentId,
Collectors.groupingBy(Employee::getEmployeeId, Collectors.toSet())));
请注意,Map
的值是另一个Map
;第一个以员工的部门 ID 为 key ,第二个以员工的员工 ID 为 key 。
关于java - 多个字段上的对象列表分组 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61108086/