stream流对复杂列表List<T>的排序问题

针对List的排序,如果是泛型是简单数据类型,如int,long等都可以直接使用Collections.sort(list)来解决,而对于存储的对象类型则不能满足。

这时我们可以通过重写实体类的CompartTo方法来实现自定义比较,但是在现在这个JDK19都发布两个月的时间点,我不允许你还不会使用JDK8的stream流来实现复杂列表的排序。

优点:随用随处理,对其他代码(实体类)无侵入性。速度也超优秀哦!

list.stream().sorted(Comparator.comparing(User::getAge).reversed())
                .collect(Collectors.toList());

解释:

1、.sorted() 代表开始进入排序。

2、Comparator.comparing(User::getAge) 表示依据User类的age字段进行比较排序。

3、reversed() 表示倒叙排列,不加默认正序排列。

4、最后是收集成List,不再赘述。

需要注意的是,当传递的泛型为User的list列表排序时,如果依据age进行排序,列表中有对象age字段为NULL,则会抛出异常,此时我们需要做额外处理,防止抛出异常。

在排序条件中,根据自己实际业务需要加上下面两种其中一种:

//null在前,加上默认为正序,所以意思就是 为null的值默认小于非空的值
Comparator.nullsFirst(Integer::compareTo)

//为空的值,默认大于非空的值
Comparator.nullsLast(Integer::compareTo)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值