Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 2个不同列表的比较_Java_Arraylist_Lambda_Java 8_Java Stream - Fatal编程技术网

Java 8 2个不同列表的比较

Java 8 2个不同列表的比较,java,arraylist,lambda,java-8,java-stream,Java,Arraylist,Lambda,Java 8,Java Stream,我需要一个关于使用Java8迭代和比较两个不同列表的帮助。如果其中一个属性匹配,那么我需要将一个列表的值设置为另一个列表的值。员工可以有多个项目。 EmployeeDto{--List 名称 身份证件 数 项目列表} 我有一个列表项目列表 投影到 { 身份证件 项目名称…} 我想比较employeeList和projectList。检查两个列表中的Id是否匹配,然后设置 employeeDto.setProjectList(项目列表) List newList=newarraylist(); f

我需要一个关于使用Java8迭代和比较两个不同列表的帮助。如果其中一个属性匹配,那么我需要将一个列表的值设置为另一个列表的值。员工可以有多个项目。 EmployeeDto{--List
名称
身份证件 数 项目列表}

我有一个列表项目列表
投影到 {
身份证件 项目名称…}

我想比较employeeList和projectList。检查两个列表中的Id是否匹配,然后设置 employeeDto.setProjectList(项目列表)

List newList=newarraylist();
for(员工名单至emp:employeeList){
用于(项目到项目:项目列表){
if(project.getId().equals(emp.getId())){
newList.add(项目);
}
emp.setProjectList(newList));
}
提前谢谢

employeeList.forEach(employee -> {
  employee.setProjectList(projectList.stream()
    .filter(project -> Objects.equals(employee.getId(), project.getId()))
    .collect(Collectors.toList()));
}); 
这是一种可能的方法


这是一种可能的方法。

无需执行
O(n^2)
工作。您可以先按emp ID对项目进行分组

Map<String, List<ProjectDto>> grouped = projects.stream().collect(groupingBy(ProjectDto::getId, toList()));
Map group=projects.stream().collect(groupingBy(ProjectDto::getId,toList());
然后简单地遍历您的员工,并为每个员工设置相应的项目列表

employees.forEach(emp -> emp.setProjectList(grouped.getOrDefault(emp.getId(), new ArrayList<>())));
employees.forEach(emp->emp.setProjectList(grouped.getOrDefault(emp.getId(),newarraylist());

无需执行
O(n^2)
工作。您可以先按emp ID对项目进行分组

Map<String, List<ProjectDto>> grouped = projects.stream().collect(groupingBy(ProjectDto::getId, toList()));
Map group=projects.stream().collect(groupingBy(ProjectDto::getId,toList());
然后简单地遍历您的员工,并为每个员工设置相应的项目列表

employees.forEach(emp -> emp.setProjectList(grouped.getOrDefault(emp.getId(), new ArrayList<>())));
employees.forEach(emp->emp.setProjectList(grouped.getOrDefault(emp.getId(),newarraylist());

到目前为止您尝试了什么?对于(EmployeeDto dto:employeeList){projectList.stream().filter(x-->x.getid.equals(dto.getid().map(dto.setProjectList(x)))。由于这是一个列表,我不确定是否处于.map条件。我知道这是错误的。我想将项目添加到列表中,然后将其设置为EmployeeDto dto:EmployeeDto列表){projectList.stream().filter(x-->x.getid.equals(dto.getid().map(dto.setProjectList(x)))。由于这是一个列表,我不确定是否处于.map条件。我知道这是错误的。我想将项目添加到列表中,然后将其设置为employeedto