用java8對list按照多個字段進行去重

現在有一個實體類Person,屬性有三個,分別是name,age,address,根據這三個屬性將list<Person>中三個字段都相同的數據進行去重。

//創建list,添加數據
        List<Person> list = new ArrayList<>();
        list.add(new Person("Tom", 15, "America"));
        list.add(new Person("Tam", 16, "China"));
        list.add(new Person("Tom", 15, "Japan"));
        list.add(new Person("Tcm", 18, "Russia"));
        list.add(new Person("Tom", 15, "America"));
        list.add(new Person("Tdm", 16, "America"));
        list.add(new Person("Tem", 17, "America"));

// 根據三個字段去重
        List<Person> lst = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(o -> o.getName() + "#" + o.getAge() + "#" + o.getAddress()))),
                ArrayList::new));

// 遍歷輸出一下
        lst.forEach(person -> System.out.println(person.toString()));

//結果:

Person [name=Tam, age=16, address=China]
Person [name=Tcm, age=18, address=Russia]
Person [name=Tdm, age=16, address=America]
Person [name=Tem, age=17, address=America]
Person [name=Tom, age=15, address=America]
Person [name=Tom, age=15, address=Japan]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章