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