首页 > 技术文章 > (转)java8实现对象列表去重

supiaopiao 2019-05-28 14:36 原文

java8实现列表去重,java8的stream和lambda的使用实例

通过普通的方式也可以达到去重的效果,但是借助java8新特性可以很方便的实现列表去重,测试demo如下

实体类:

public class Person {
    private int id;
    private String name;
    private int age;

    public Person() {
    }

    public Person(int id, String name, int age) {
        this.id = id;

        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
@Override
public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }

测试:

       List<Person> persons = new ArrayList();
       List<Integer> ids = new ArrayList<>();//用来临时存储person的id
       persons.add(new Person(1, "name1", 10));
       persons.add(new Person(2, "name2", 21));
       persons.add(new Person(5, "name5", 55));
       persons.add(new Person(3, "name3", 34));
       persons.add(new Person(1, "name1", 10));

       List<Person> personList = persons.stream().filter(// 过滤去重
               v -> {
                   boolean flag = !ids.contains(v.getId());
                   ids.add(v.getId());
                   return flag;
               }
       ).collect(Collectors.toList());
       System.out.println(personList);

还可以实现条件过滤和列表排序:

//获取person集合中的所有大于18周岁,并排序
List<Person> personList= new ArrayList();
personList.add(new Person(1, "name1", 10));
personList.add(new Person(2, "name2", 21));
personList.add(new Person(5, "name5", 55));
personList.add(new Person(3, "name3", 34));
personList.add(new Person(4, "name4", 6));
personList.stream()
        .filter(p -> p.getAge() >= 18)//获取所有18岁以上的用户
        //.sorted(Comparator.comparing(Person::getAge))//依年纪升序排序
        .sorted(Comparator.comparing(Person::getAge).reversed())//依年纪降序排序
        .collect(Collectors.toList());
System.out.println(personList);

转自:https://www.jianshu.com/p/63d2db850a8d

推荐阅读