按值匹配类列表

时间:2016-12-12 15:03:51

标签: java android

我有2个班级列表:

List<Person> ls1
List<Person> ls2

班级成员:

public class Person {
   String name;
   String id;
}

ls1具有名称的人类,ls2具有名称和iD。 我需要做的是按名称列出匹配列表,然后将ID从ls2复制到ls1。

除了在ls1中为每个人构建循环并在ls2中找到它之外,最有效的方法是什么。我怎样才能更快地匹配它们?

3 个答案:

答案 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转换为地图nameid,然后循环浏览ls1,从地图设置id

答案 2 :(得分:0)

我会这样做

ls2.stream().filter(person ->
        person.getId()==YOURID).
        peek(person -> ls1.add(person))
        .collect(Collectors.toList());