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对象属性去重内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!