Java8利用stream的distinct()方法对list集合中的对象去重和抽取属性去重

    技术2022-07-11  100

    首先新建一个实体类Person,因为要对该对象进行去重,所以需要重写equals和hashCode方法

    @Data public class Person { /** 编码 */ private String code; /** 名字 */ private String name; public Person(String code, String name) { this.code = code; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return code.equals(person.code) && name.equals(person.name); } @Override public int hashCode() { return Objects.hash(code, name); } }

    实例化五个对象将其放入list集合中

    Person person1 = new Person("001", "张三"); Person person2 = new Person("001", "张三"); Person person3 = new Person("002", "李四"); Person person4 = new Person("003", "王五"); Person person5 = new Person("004", "王五"); List<Person> personList = new ArrayList<>(); personList.add(person1); personList.add(person2); personList.add(person3); personList.add(person4); personList.add(person5);

    首先我们看一下去重前

    System.out.println("----------去重前----------"); long count = personList.stream().count(); System.out.println("去重之前总量为"+count); personList.forEach(t -> System.out.println(t.toString()));

    输出结果为

    ----------去重前---------- 去重之前总量为5 Person(code=001, name=张三) Person(code=001, name=张三) Person(code=002, name=李四) Person(code=003, name=王五) Person(code=004, name=王五)

    去重之后

    System.out.println("----------去重后----------"); long count1 = personList.stream().distinct().count(); System.out.println("去重之后总量为"+count1); List<Person> resultList1 = personList.stream().distinct().collect(Collectors.toList()); resultList1.forEach(t -> System.out.println(t.toString()));

    输出结果为

    ----------去重后---------- 去重之后总量为4 Person(code=001, name=张三) Person(code=002, name=李四) Person(code=003, name=王五) Person(code=004, name=王五)

    可见已经完成对对象的去重

    接下来抽取personList中的name属性(不去重)转化为list

    System.out.println("----------抽取personList中的name属性(不去重)转化为list----------"); List<String> nameList1 = personList.stream().map(Person::getName).collect(Collectors.toList()); nameList1.forEach(t-> System.out.println(t));

    输出结果为

    ----------抽取personList中的name属性(不去重)转化为list---------- 张三 张三 李四 王五 王五

    抽取personList中的name属性(去重)后转化为list

    List<String> nameList2 = personList.stream().map(Person::getName).distinct().collect(Collectors.toList()); nameList2.forEach(t-> System.out.println(t));

    输出结果为

    ----------抽取personList中的name属性(去重)后转化为list---------- 张三 李四 王五

    其他: Java8利用stream将对象集合list中抽取属性集合转化为map或list https://blog.csdn.net/weixin_44905182/article/details/105079266 Java8利用stream对list集合中的bigdecimal进行分组求和,均值,最大值,最小值 https://blog.csdn.net/weixin_44905182/article/details/105792291

    Processed: 0.015, SQL: 9