首页 > 解决方案 > 如何使用流 API 从 java 中的对象列表中删除重复项

问题描述

我已经搜索了如何使用 Stream API 从列表中删除重复项的解决方案

只发现这个问题 How to remove duplicates from list of objects by id

我有一个我需要按人名过滤的人员列表,尝试使用下面的代码段,但它没有按人名过滤

private static Map<Person, Integer> getUniqueByBiggerId(Collection<Person> persons) {
        return persons.stream().collect(Collectors.toMap(
                persons ->
                        persons,
                Person::getId,
                (id1, id2) -> {
                    if (id2 > id1)
                        return id2;
                    else
                        return id1;
                }
        ));
    }

public  static void main(String args[]){
   //.........
    List<Person> Persons
            = Arrays.asList(Person1, Person2,Person2,Person1,Person2, Person1);

    getUniqueByBiggerId(Persons);

}

标签: javajava-stream

解决方案


您非常接近解决方案:

public class Test {
    public static void main(String[] args) throws Exception {
        List<Person> persons = Arrays.asList(new Person("a", 2), new Person("b", 1), new Person("a", 3));
        persons = getUniqueByBiggerId(persons);
        System.out.println(persons);

    }

    private static List<Person> getUniqueByBiggerId(Collection<Person> persons) {
        return new ArrayList<>(
                persons.stream().collect(Collectors.toMap(Person::getName, Function.identity(), (p1, p2) -> {
                    if (p1.getId() > p2.getId())
                        return p1;
                    else
                        return p2;
                })).values());
    }
}

record Person(String name, int id) {
    public String getName() {
        return name;
    }

    public int getId() {
        return id;
    }
}

输出:

[Person[name=a, id=3], Person[name=b, id=1]]

推荐阅读