我有2个班级列表:
List<Person> ls1
List<Person> ls2
班级成员:
public class Person {
String name;
String id;
}
ls1具有名称的人类,ls2具有名称和iD。 我需要做的是按名称列出匹配列表,然后将ID从ls2复制到ls1。
除了在ls1中为每个人构建循环并在ls2中找到它之外,最有效的方法是什么。我怎样才能更快地匹配它们?
答案 0 :(得分:3)
使用list2构建地图并遍历list1并检查地图中是否存在,然后复制数据。这是Java 8中的解决方案
final Map<String, Person> personByName = lis2.stream().collect(Collectors.toMap(Person::getName, Function.identity()));
lis1.forEach(person -> {
final Person personFromMap= personByName.get(person.getName());
if(Objects.nonNull(personFromMap)){
//copy id, assuming a setId/getId method exist
person.setId(personFromMap.getId());
}
});
答案 1 :(得分:0)
您可以将ls2
转换为地图name
至id
,然后循环浏览ls1
,从地图设置id
。
答案 2 :(得分:0)
我会这样做
ls2.stream().filter(person ->
person.getId()==YOURID).
peek(person -> ls1.add(person))
.collect(Collectors.toList());