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

作者:tangerr 时间:2023-08-30 20:50:48 

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

来源:https://blog.csdn.net/tangerr/article/details/90349986

标签:java8,List,对象属性,去重
0
投稿

猜你喜欢

  • Spring RestTemplate的使用与踩坑

    2022-01-12 21:43:14
  • pageHelper一对多分页解决方案示例

    2022-08-22 19:55:22
  • C/C++ Qt TreeWidget 嵌套节点操作使用

    2022-07-10 01:55:59
  • 新手入门Jvm--jvm概览

    2023-11-09 15:42:31
  • Android自定义圆形进度条

    2021-08-01 14:29:28
  • Android Dialog 动画实例详解

    2022-10-22 22:24:29
  • Java线程池源码的深度解析

    2023-10-02 19:33:40
  • springboot 跨域配置类及跨域请求配置

    2023-01-31 14:27:19
  • springboot+jwt+springSecurity微信小程序授权登录问题

    2022-10-13 03:36:22
  • c#中WebService的介绍及调用方式小结

    2021-05-29 00:10:17
  • Java并发之线程池Executor框架的深入理解

    2022-03-13 10:20:55
  • Android使用ItemTouchHelper实现侧滑删除和拖拽

    2021-12-18 20:00:40
  • 详解Java包装类及自动装箱拆箱

    2023-11-14 21:13:23
  • Java操作FreeMarker模板引擎的基本用法示例小结

    2022-01-15 11:34:15
  • C#操作windows系统进程的方法

    2023-09-01 03:13:26
  • Java实现批量下载(打包成zip)的实现

    2022-04-02 01:53:05
  • C#实现char字符数组与字符串相互转换的方法

    2022-01-18 05:28:52
  • MyBatis源码浅析(一)开篇

    2022-09-28 03:28:24
  • Java根据模板导出Excel报表并复制模板生成多个Sheet页

    2022-09-09 01:16:01
  • Java使用Hutool实现AES、DES加密解密的方法

    2021-06-03 16:49:57
  • asp之家 软件编程 m.aspxhome.com