我有两个类似的对象列表:
public class Person {
private int id;
private String name;
private String surname;
}
public class Name {
private int id;
private String name;
}
我的Person
列表中没有填写名称字段。我需要将其与与字段 id 匹配的Name
列表合并。
问题:如何使用 Java 8 流实现此目的的最佳方法?
答案 0 :(得分:2)
您可以这样做:
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, "");
}
假设名称是您的Names
列表,而人员是您的Person
列表,同样,如果未找到人员id
,则默认name
是空字符串。
答案 1 :(得分:2)
首先,使用Map
更好地访问Name
对象,因此这里使用流是一种解决方案:
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(), "")));