服务器之家

服务器之家 > 正文

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

时间:2021-08-25 11:23     来源/作者:tangerr

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

?
1
2
3
4
5
6
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 的去重策略上.

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

第二种: 炫酷的java8写法

?
1
2
3
4
5
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写法

?
1
2
3
4
5
6
7
8
9
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根据某一属性过滤去重

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

java8过滤StudentExamState=0的数据

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

java8过滤ExamRoomStudentCount=0的数据

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

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

原文链接:https://blog.csdn.net/tangerr/article/details/90349986

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部