gpt4 book ai didi

java8 stream多字段排序的实现

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java8 stream多字段排序的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 。

使用java8新特性,下面先来点基础的 。

List<类> list; 代表某集合 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//返回 对象集合以类属性一升序排序
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())); //先以属性一升序,再进行属性二降序

通过以上例子我们可以发现 1. Comparator.comparing(类::属性一).reversed(); 2. Comparator.comparing(类::属性一,Comparator.reverseOrder()); 两种排序是完全不一样的,一定要区分开来 1 是得到排序结果后再排序,2是直接进行排序,很多人会混淆导致理解出错,2更好理解,建议使用2 。

实际例子:

现有一个类test 有两个属性:state 状态 time 时间,需要状态顺序且时间倒序 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class test {
   //状态
   private int state;
   //时间
   private Date time;
   public test( int state, Date time) {
     this .state = state;
     this .time = time;
   }
   public int getState() {
     return state;
   public void setState( int state) {
   public Date getTime() {
     return time;
   public void setTime(Date time) {
   @Override
   public String toString() {
     return "test{" +
         "state=" + state +
         ", time=" + DateUtils.formatDateYMD(time) +
         '}' ;
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class testRun {
   public static void main(String[] args) {
     List<test> testList = new ArrayList<>();
     Date d = DateUtils.now();
     for ( int i = 1 ; i <= 3 ; i++) {
       test t = new test(i, DateUtils.addDays(d, i));
       testList.add(t);
     }
       test t = new test(i, DateUtils.addMonths(d, i));
     testList.forEach(o -> {
       System.out.println(o.toString());
     });
     List<test> sort = testList.stream().sorted(Comparator.comparing(test::getState).thenComparing(test::getTime,Comparator.reverseOrder())).collect(toList());
     System.out.println( "------------------------------------" );
     sort.forEach(o -> {

运行结果

排序前: test{state=1, time=2019-07-24} test{state=2, time=2019-07-25} test{state=3, time=2019-07-26} test{state=1, time=2019-08-23} test{state=2, time=2019-09-23} test{state=3, time=2019-10-23} ------------------------------------ 排序后: Process finished with exit code 0 。

到此这篇关于java8 stream多字段排序的实现的文章就介绍到这了,更多相关java8 stream多字段排序内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/kuanglongblogs/p/11230250.html 。

最后此篇关于java8 stream多字段排序的实现的文章就讲到这里了,如果你想了解更多关于java8 stream多字段排序的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com