Java8流:从一个列表到另一个列表匹配并添加参数

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的映射 从映射中迭代

我对streams和lambda有点陌生。正在为这个用例寻找更整洁的代码

我有两个对象类型列表

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