List排序方法
List排序方法
一、.使用 Stream 流排序(JDK1.8之后很好用,包括1.8都可以使用)
userBonusVOList=userBonusVOList.stream().sorted(Comparator.comparing(UserBonusVO::getUserJsAmount).reversed()).collect(Collectors.toList());
其中 reversed() 表示倒序的意思,如果不使用此方法则是正序。
扩展:排序字段为 null
使用 Stream 进行排序时,如果排序的字段出现 null 值就会导致异常发生,具体示例如下:
以上代码的执行结果,如下图所示:
想要解决上述问题,需要给 Comparator.comparing 传递第二个参数:Comparator.nullsXXX,如下代码所示:
Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面,如果想要将 null 值放到集合最后面可以使用 Comparator.nullsLast。
以上代码的执行结果,如下图所示:
二、使用 Comparable 排序
按照本文设计的场景,我们需要创建一个包含了用户列表的 List 集合,并按用户的年龄从大到小进行排序,具体实现代码如下:
以上代码的执行结果,如下图所示:
本方法的核心代码如下:
三、使用 Comparator 排序
Comparable 是类内部的比较方法,而 Comparator 是排序类外部的比较器。使用 Comparator 比较器,无需修改原 Person 类,只需要扩充一个 Person 类的比较器就行了,Comparator 的实现方法有以下两种:
新建 Comparator 比较器;
使用 Comparator 匿名类比较器。
其中,第二种实现方法要更简洁一些,我们通过下面的具体代码,来观察一下二者的区别。
2.1 新建 Comparator 比较器
以上代码的执行结果,如下图所示:
2.2 匿名类比较器
以上代码的执行结果,如下图所示:
四、获取list集合中的某个元素下标(比如:排名的时候)
点击查看代码
//我的佣金排名
int top = 0;
for (int i=0;i<userBonusVOList.size();i++){
if(userBonusVOList.get(i).getUserId().equals(userId)){
top = i+1;
}
}
log.info("top"+top);
vo.setMyRankingNumber(top);
总结
本文介绍了 3 种 List 排序的方法以及获取list集合指定元素下标的方法,排序前两种方法常用于 JDK 8 之前的版本,其中比较器 Comparator 有两种实现的写法,而在 JDK 8 之后的版本,就可以使用 Comparator.comparing 实现排序了,如果排序字段中可能出现 null 值,要使用 Comparator.nullsXXX 进行排序处理(否则会报错)。
本文来自博客园,作者:青喺半掩眉砂,转载请注明原文链接:https://www.cnblogs.com/xiaoguo-java/p/16643576.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了