本篇文章小编给大家分享一下java8实现List中对象属性代码去重方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
java8的stream流能完美解对象集合去重问题.
List 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 persons = Arrays.asList(p1, p2, p3);
第一种: 不使用java8
private List removeDupliByRecordId(List userCars) {
Set personSet = new TreeSet((o1, o2) ->o1.getRecordId().compareTo(o2.getRecordId()));
personSet.addAll(userCars);
return new ArrayList(personSet);
}
这也是大多数人第一想到的,借助 TreeSet 去重,其中 TreeSet 的其中一个构造函数接收一个排序的算法,同时这也会用到 TreeSet 的去重策略上.
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
第二种: 炫酷的java8写法
List 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 names = new ArrayList<>();//用来临时存储person的id
List 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 filterList = examRoomModelLists.stream().filter(ExamRoomModel -> !Objects.equals(ExamRoomModel.getExamRoomStudentCount(), 0)).collect(Collectors.toList());
uc浏览器网页版入口官网-手机/电脑uc浏览器网页版入口地址
little fox官方网站入口地址-little fox网页版中国官网入口地址
樱花动漫网官网在线观看入口-樱花动漫网最新网页版入口地址2026
剑桥少儿英语官网入口网址-剑桥少儿英语网页版入口地址
手机百度网盘登录入口地址-百度网盘手机网页版登录入口地址
192.168.1.1无线路由怎么访问?192.168.1.1无线路由器设置登录入口地址