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

时间:2021-05-19

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

到此这篇关于java8实现List中对象属性的去重方法的文章就介绍到这了,更多相关java8 List对象属性去重内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章