将两个不同的对象列表合并为一个具有共享 id 字段的对象列表



我有两个不同的对象列表,如下所示:

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流的最佳方法是什么?

首先,使用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(), "")));

你可以这样做:

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是空字符串。

最新更新