java8 List对象属性去重 java8实现List中对象属性的去重方法

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

java8 List对象属性去重 java8实现List中对象属性的去重方法

tangerr   2021-03-17 我要评论
想了解java8实现List中对象属性的去重方法的相关内容吗,tangerr在本文为您仔细讲解java8 List对象属性去重的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java8,List对象属性去重,java8,List,去重,下面大家一起来学习吧。

java8的stream流能完美解对象集合去重问题.

  List<UserCar> list1 = new ArrayList();
  UserCar userCar = new UserCar();
  userCar.setId(1);
  userCar.setCarNo("AA");
  list1.add(userCar);

  UserCar userCar1 = new UserCar();
  userCar1.setId(2);
  userCar1.setCarNo("AA");
  list1.add(userCar1);


  Person p1 = new Person(1, "11");
  Person p2 = new Person(1, "22");
  Person p3 = new Person(2, "11");
  List<Person> persons = Arrays.asList(p1, p2, p3);

第一种: 不使用java8

 private List<UserCar> removeDupliByRecordId(List<UserCar> userCars) {
  Set<UserCar> personSet = new TreeSet<UserCar>((o1, o2) ->o1.getRecordId().compareTo(o2.getRecordId()));
  personSet.addAll(userCars);

  return new ArrayList<UserCar>(personSet);
 }

 这也是大多数人第一想到的,借助 TreeSet 去重,其中 TreeSet 的其中一个构造函数接收一个排序的算法,同时这也会用到 TreeSet 的去重策略上.

public TreeSet(Comparator<? super E> comparator) {
  this(new TreeMap<>(comparator));
 }

第二种: 炫酷的java8写法

  List<Person> unique = persons.stream().collect(
    Collectors.collectingAndThen(
      Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new)
  );
  unique.forEach(p -> System.out.println(p));

第三种: 炫酷的java8写法

  List<String> names = new ArrayList<>();//用来临时存储person的id

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

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们