关于集合的各种去重和排序
1.排序
(1)对象本身 实现Comparable<对象>接口,重写compareTo方法
Collections.sort(List<对象>);
(2) 定义一个对象实现Comparator<要排序的对象>,重写compare方法
然后new一个实现类,最后 Collections.sort(List<对象>,实现类);
(3)(2)的另一种形式,用匿名内部类
(4)jdk8的sort排序
升序
list.sort((Users u1, Users u2) -> u1.getAge().compareTo(u2.getAge()));
(5)jdk的stream流排序
// 返回对象集合以类属性一升序排序
list.stream().sorted(Comparator.comparing(类::属性一));
// 返回对象集合以类属性一降序排序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序
// 返回对象集合先以类属性一升序,再以属性二升序
list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));
// 返回 对象集合以类属性一降序 属性二升序 注意两种写法
// 先以属性一升序,升序结果进行属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));
// 先以属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));
// 返回 对象集合以类属性一降序 属性二降序 注意两种写法
// 先以属性一升序,升序结果进行属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));
// 先以属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));
// 返回 对象集合以类属性一升序 属性二降序 注意两种写法
// 先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());
// 先以属性一升序,再进行属性二降序
list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));
2.去重
(1)java去重
用treeset ,用实现排序的第一种方法,实现Comparable<对象>接口,重写compareTo方法
(2)stream流去重(本质还是treeset那一套)
单个属性去重
ArrayList<ProductProcessDrawbackDto> collect = records1.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(
ProductProcessDrawbackDto::getId))), ArrayList::new));
多个属性去重
ArrayList<PatentDto> collect1 = patentDtoList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p->p.getPatentName() + ";" + p.getLevel()))), ArrayList::new));
list
HashSet hashSet = new HashSet<>();
list=list.stream().filter(i -> hashSet.add(i.get("cmenuid"))).collect(Collectors.toList());
2求差值
maps-usermaps根据cguid的差值
List<Map> UserNeedData = maps.stream().filter((item) -> !UserMaps.stream().map((item2) -> item2.get("cguid")).collect(Collectors.toList()).contains(item.get("cguid"))).collect(Collectors.toList());
usermaps-maps
List<Map> UserNoNeedData = UserMaps.stream().filter((item) -> !maps.stream().map((item2) -> item2.get("cguid")).collect(Collectors.toList()).contains(item.get("cguid"))).collect(Collectors.toList());