searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Java8如何使用stream实现多字段排序

2024-05-28 02:19:39
5
0
有些场景不能使用sql排序时,利用Java8的stream流能够很方便地对List内的元素进行排序操作。
 
例如用于排序的集合为List<类> rankList = new ArrayList<>();
一、单字段排序比较简单,使用reversed()或Comparator.reverseOrder()都可以
1.升序:
rankList.stream().sorted(Comparator.comparing(类::属性一)).collect(Collectors.toList());
 
2.降序:
方法1-先对属性值进行升序,再对结果进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed()).collect(Collectors.toList());
方法2-直接对属性值进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder())).collect(Collectors.toList());
 
二、进行多字段排序,需要注意写法
1.属性一升序,属性二升序:
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二)).collect(Collectors.toList());
 
2.属性一升序,属性二降序:
方法1-先对属性一升序,结果进行降序后,再对属性二升序,最后结果进行降序(属性一排序了三次)
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed()).collect(Collectors.toList());
方法2-先对属性一升序,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
 
3.属性一降序,属性二升序:
方法1-先对属性一升序,结果进行降序后,再对属性二升序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二)).collect(Collectors.toList());
方法2-先对属性一降序,再对属性二升序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder()).thenComparing(类::属性二)).collect(Collectors.toList());
 
4.属性一降序,属性二降序:
方法1-先对属性一升序,结果进行降序后,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
方法2-先对属性一降序,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder()).thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
方法3-先对属性一升序,再对属性二升序,最后结果进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二).reversed()).collect(Collectors.toList());
 
总结:多字段需要降序时,使用Comparator.reverseOrder()更好理解
0条评论
0 / 1000
韩****萍
2文章数
0粉丝数
韩****萍
2 文章 | 0 粉丝
韩****萍
2文章数
0粉丝数
韩****萍
2 文章 | 0 粉丝
原创

Java8如何使用stream实现多字段排序

2024-05-28 02:19:39
5
0
有些场景不能使用sql排序时,利用Java8的stream流能够很方便地对List内的元素进行排序操作。
 
例如用于排序的集合为List<类> rankList = new ArrayList<>();
一、单字段排序比较简单,使用reversed()或Comparator.reverseOrder()都可以
1.升序:
rankList.stream().sorted(Comparator.comparing(类::属性一)).collect(Collectors.toList());
 
2.降序:
方法1-先对属性值进行升序,再对结果进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed()).collect(Collectors.toList());
方法2-直接对属性值进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder())).collect(Collectors.toList());
 
二、进行多字段排序,需要注意写法
1.属性一升序,属性二升序:
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二)).collect(Collectors.toList());
 
2.属性一升序,属性二降序:
方法1-先对属性一升序,结果进行降序后,再对属性二升序,最后结果进行降序(属性一排序了三次)
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed()).collect(Collectors.toList());
方法2-先对属性一升序,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
 
3.属性一降序,属性二升序:
方法1-先对属性一升序,结果进行降序后,再对属性二升序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二)).collect(Collectors.toList());
方法2-先对属性一降序,再对属性二升序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder()).thenComparing(类::属性二)).collect(Collectors.toList());
 
4.属性一降序,属性二降序:
方法1-先对属性一升序,结果进行降序后,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
方法2-先对属性一降序,再对属性二降序
rankList.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder()).thenComparing(类::属性二, Comparator.reverseOrder())).collect(Collectors.toList());
方法3-先对属性一升序,再对属性二升序,最后结果进行降序
rankList.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二).reversed()).collect(Collectors.toList());
 
总结:多字段需要降序时,使用Comparator.reverseOrder()更好理解
文章来自个人专栏
Java基础
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0