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

关于集合的各种去重和排序
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());
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值