我有两个不同的对象列表,如下所示:
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
是空字符串。