Java 8:合并两个包含ID的对象的列表

坎比亚索:

我有2个清单:


// old list
List<Employee> oldList = new ArrayList<>();
Employee emp1 = new Employee();
emp1.setPersonalNumber("123");
emp1.setName("old_name1");
emp1.setStatus(Status.OLD);

Employee emp2 = new Employee();
emp2.setPersonalNumber("456");
emp2.setName("old_name2");
emp2.setStatus(Status.OLD);

oldList.add(emp1);
oldList.add(emp2);

// new list
List<Employee> newList = new ArrayList<>();
Employee newEmp1 = new Employee();
newEmp1.setPersonalNumber("123");
newEmp1.setName("new_name1");
newEmp1.setStatus(Status.NEW);

Employee newEmp2 = new Employee();
newEmp2.setPersonalNumber("456");
newEmp2.setName("new_name2");
newEmp2.setStatus(Status.NEW);

newList.add(newEmp1);
newList.add(newEmp2);

有谁知道如何将这两个列表合并到一个包含“ PersonalNumber”分组的两个列表中所有雇员的列表中,并将元件的顺序保留在newList中?newList来自数据库,具有预定义的排序方式,我需要保持这种方式,因此无法在Java端再次对其进行排序

结果应为:

[
    {"123", "new_name1", NEW},
    {"123", "old_name1", OLD},
    {"456", "new_name2", NEW},
    {"456", "old_name1", OLD},
]

我保证两个列表的大小相同,并且包含具有相同personalNumbers的员工。我只想用相同的personalNumber“注入”新雇员下的每个老雇员

马特:

排序的集合应该对此起作用。

newList.addAll(oldList);
Collections.sort(newList, Comparator.comparing(Employee::getPersonalNumber) );

关键是,“保证这种排序是稳定的:相等元素不会由于排序而重新排序。”

由于无法对新列表进行排序,因此我认为您不知道新列表的顺序。您可以使用N'2方法进行。

for(int i = 0; i<newList.size(); i+=2){
    String newNum = newList.get(i).getPersonalNumber();
    Employee old = oldList.stream().filter(
          emp->newNum.equals(
              emp.getPersonalNumber()
          )
        ).findFirst().orElse(null);
    newList.add(i+1, old);
    oldList.remove(old); //not nescessary?
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 8:按键合并两个包含对象的列表

合并Java 8中的两个对象列表

使用Java 8合并具有唯一ID的两个列表中的对象

如何使用 Java 8 合并两个不同类型的自定义对象列表

合并Java中的两个对象列表

Java Stream Api-合并两个对象列表

合并两个列表 (java 7)

合并两个对象数组,Java

合并Java中的两个对象

合并两个对象(java)

合并两个流Java 8

合并两个地图与Java 8

两个 List 与 java 8 合并

在Java中合并两个hashMap对象时如何合并列表

合并Java中的两个对象列表以使用Jackson创建一个Json

比较两个id属性的列表,仅从list1中删除该对象,而不从list2中删除,然后在Java中合并为单个列表

在相同类型的java中合并两个对象列表

Java的8两个列表流

如何在Java-8中合并来自同一关系的两个列表

合并两个Long类型的列表,并添加到Java 8中的现有地图

根据条件合并两个列表,然后使用Java 8将结果推送到地图

JAVA 8:如何使用2流合并两个列表

检查两个java列表是否包含相同的对象,与元素的顺序和数量无关

如何筛选使用Java 8个流两个列表对象?

如何在Java8流中将两个String列表合并为一个列表而不重复

比较两个对象列表并通过比较java 8中两个列表的一个属性形成一个新列表

使用Java流将两个大小相同(类型不同)的列表合并到域对象列表中

如何通过比较Java中给定对象中的字段值来合并两个对象列表

在Java中以恒定时间合并两个列表