Java 使用共享id字段将两个不同的对象列表合并为一个
我有两个不同的对象列表,如下所示:Java 使用共享id字段将两个不同的对象列表合并为一个,java,java-8,java-stream,Java,Java 8,Java Stream,我有两个不同的对象列表,如下所示: public class Person { private int id; private String name; private String surname; } public class Name { private int id; private String name; } 我的人员列表没有填写字段名。我需要将其与匹配字段id的名称列表合并 问题:如何使用Java 8 streams实现这一点的最佳方法?
public class Person {
private int id;
private String name;
private String surname;
}
public class Name {
private int id;
private String name;
}
我的人员列表没有填写字段名。我需要将其与匹配字段id的名称列表合并
问题:如何使用Java 8 streams实现这一点的最佳方法?您可以这样做:
Map<Integer, String> map = names.stream().collect(Collectors.toMap(o -> o.id, o -> o.name));
for (Person person : persons) {
person.name = map.getOrDefault(person.id, "");
}
假设姓名是您的姓名列表,人员是您的人员列表,如果找不到人员id,则默认名称为空字符串。您可以这样做:
Map<Integer, String> map = names.stream().collect(Collectors.toMap(o -> o.id, o -> o.name));
for (Person person : persons) {
person.name = map.getOrDefault(person.id, "");
}
假设姓名是您的姓名列表,人员是您的人员列表,并且如果找不到人员id,则默认名称是空字符串。首先,使用映射更适合访问名称对象,因此使用流是一种解决方案:
List<Person> personList = ...
List<Name> nameList = ...
Map<Integer,String> nameMap = nameList.stream()
.collect(Collectors.toMap(Name::getId,Name::getName));
personList.forEach(person -> person.setName(nameMap.getOrDefault(person.getId(), "")));
首先,使用映射更好地访问名称对象,因此在这里使用流是一个解决方案:
List<Person> personList = ...
List<Name> nameList = ...
Map<Integer,String> nameMap = nameList.stream()
.collect(Collectors.toMap(Name::getId,Name::getName));
personList.forEach(person -> person.setName(nameMap.getOrDefault(person.getId(), "")));
为什么要使用流呢?我使用JpaRepository从数据库中获取这两个列表。如果id不存在,我们可以存储一个空字符串,元素的顺序也不重要。为什么要使用streams?我使用JpaRepository从数据库中获取这两个列表。如果id不存在,我们可以存储一个空字符串,元素的顺序也无关紧要