关于集合的排序和去重总结

关于集合的各种去重和排序
1.排序
(1)对象本身 实现Comparable<对象>接口,重写compareTo方法
关于集合的排序和去重总结_第1张图片
Collections.sort(List<对象>);

(2) 定义一个对象实现Comparator<要排序的对象>,重写compare方法
然后new一个实现类,最后 Collections.sort(List<对象>,实现类);
(3)(2)的另一种形式,用匿名内部类
关于集合的排序和去重总结_第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());

你可能感兴趣的:(javaEE学习笔记,java,开发语言)