欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-08-28 09:26:21|栏目:JAVA代码|点击:

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());

java8根据某一属性过滤去重

//根据id去重
examRoomModelLists = examRoomModelLists.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
        // 利用 TreeSet 的排序去重构造函数来达到去重元素的目的
        // 根据firstName去重
        () -> new TreeSet<>(Comparator.comparing(ExamRoomModel::getId))), ArrayList::new));

java8过滤StudentExamState=0的数据

em.setNoLoginExamineeCount((examinee.stream().map(ExamineeEntity::getStudentExamState).filter(x -> 
x == 0).collect(Collectors.toList())).size());
      }

java8过滤ExamRoomStudentCount=0的数据

 List<ExamRoomModel> filterList = examRoomModelLists.stream().filter(ExamRoomModel -> 
 !Objects.equals(ExamRoomModel.getExamRoomStudentCount(), 0)).collect(Collectors.toList());

上一篇:eclipse安装spring ide的步骤详解

栏    目:JAVA代码

下一篇:Java线程实现时间动态显示

本文标题:java8实现List中对象属性的去重方法

本文地址:http://www.codeinn.net/misctech/170418.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有