Java8流:从一个列表到另一个列表匹配并添加参数
我对streams和lambda有点陌生。正在为这个用例寻找更整洁的代码 我有两个对象类型列表Java8流:从一个列表到另一个列表匹配并添加参数,java,list,java-8,java-stream,Java,List,Java 8,Java Stream,我对streams和lambda有点陌生。正在为这个用例寻找更整洁的代码 我有两个对象类型列表 class Employee{ long empId; String empName; String deptName } 及 最初,员工列表仅填充empId和empName。 部门列表中填充了所有字段deptId,deptName,empId 我必须将相应的deptName从部门列表填充到员工列表中 这就是我所做的 从部门列表中创建empID和deptName的映射 从映射中迭代
class Employee{
long empId;
String empName;
String deptName
}
及
最初,员工列表仅填充empId
和empName
。
部门列表中填充了所有字段deptId
,deptName
,empId
我必须将相应的deptName
从部门列表填充到员工列表中
这就是我所做的
empID
和deptName
的映射Map departmentMap=departmentList.stream()
.collect((Collectors.toMap(Department::getEmpId,Department::getDeptName));
员工名单。forEach(emp->{
if(departmentMap.containsKey(emp.getEmpId()){
emp.setDeptName(departmentMap.get(emp.getEmpId());
}
});
在Java 8/10中是否有更干净或整洁的方法来处理此问题?如果我理解正确,您正在寻找类似以下内容的方法:
List employeeList=List.of(新员工(1,“约翰”)、新员工(2,“艾米丽”);
列表部门列表=列表(新部门(1,“部门1”,1),新部门(2,“部门2”,2));
Map departmentMap=departmentList.stream()
.collect(toMap(department->department.empId,department->department));
employeeList.forEach(e->e.deptName=departmentMap.get(e.empId.deptName);
您可以使用将您的
列表
转换为映射
,然后只需查看您的员工列表
,并为每个员工分配其部门。如果所有参数构造函数和新列表都是可能的,您可以使用流,例如列表更新员工=员工列表.stream().Map(emp->new Employee(emp.getEmpId(),emp.getEmpName(),departmentMap.getOrDefault(emp.getEmpId(),emp.getDeptName()))).collect(Collectors.toList());
或者您对当前方法也比较满意。
class Department{
long deptId;
String deptName;
long empId;
}
Map<Long,String> departmentMap = departmentList.stream()
.collect((Collectors.toMap(Department::getEmpId, Department::getDeptName)));
employeeList.forEach(emp -> {
if(departmentMap.containsKey(emp.getEmpId())){
emp.setDeptName(departmentMap.get(emp.getEmpId()));
}
});