首页 > 解决方案 > 比较两个列表并分配到新的对象列表中

问题描述

我有一个列表,其中包含 Employee 类的对象,而另一个列表包含 Departments 类的对象,如下所示:-

Class Employee {
String emolpyee_id;
String employee_Name;
}
Class Dapartment {
String emolpyee_id;
String employee_Department;
}

List<Employee> empl =  = new ArrayList<>();
List<Dapartment> depart =  = new ArrayList<>();

Employee e1 = new Employee("12","Testing");
Employee e2 = new Employee("16","TestingOthers");

Dapartment d1 = new Dapartment("12","IT");
Dapartment d2 = new Dapartment("12","Networking");
Dapartment d3 = new Dapartment("12","Financing");
Dapartment d4 = new Dapartment("16","IT");
Dapartment d5 = new Dapartment("16","Networking");

empl.add(e1);
empl.add(e2);

depart.add(d1);
depart.add(d2);
depart.add(d3);
depart.add(d4);
depart.add(d5);

Class ExpectedResult {
String emolpyee_id;
String employee_Name;
List<String> employee_Department;
}

List<ExpectedResult> expResult = {{"12","Testing",{"IT","Networking","Financing"}} ,{"16","TestingOthers",{"IT","Networking"}}}

我知道我们可以使用普通的 for 循环来执行此操作,但我想使用 lambda 和 java 8 的流来实现此输出。

标签: javalistlambdajava-8java-stream

解决方案


首先使用 groupingBy 流式传输List<Department>Map<String,List<String>>这是员工 ID 作为键的映射,值是部门列表

Map<String, List<String>> groupby = depart.stream().
            collect(Collectors.groupingBy(Department::getEmolpyee_id, Collectors.mapping(Department::getEmployee_Department, Collectors.toList())));

然后为每个对象List<Employee>获取部门Map

List<ExpectedResult> expected = empl.stream().
            map(emp-> new ExpectedResult(emp.getEmolpyee_id(),emp.getEmployee_Name(),groupby.get(emp.getEmolpyee_id()))).collect(Collectors.toList());

请注意,如果 groupby不包含员工 ID 和值,您可能会为List<String> employee_Department;inExpectedResultMap

旁注: class小写Class是错误的,部门拼写更正


推荐阅读