• 对List对象集合进行排序像sql的order by一样


    1.背景

    原数据查询是使用一个sql进行查询并使用order by 对多字段进行排序,现在需要分批次查询出数据全部放入list中在进行排序,需与数据库使用order by排序一致。

    2.解决办法

    在java 8之后,有了Comparator比较器,直接使用Comparator进行解决,如下:

    public class UserInfo{  
      
        private Integer userId;  
        private String username;  
        private Date birthDate;  
        private Integer age;  
        private float fRate;  
        private char ch;  
    //此处get/set方法省略
    }

    sql排序为:

    select * from user_info order by username asc ,birthDate asc ,age desc;

    java排序为

    //这里只列出排序的方法,假设查询出的list集合为userInfoList
    
    userInfoList.sort(Comparator.comparing(UserInfo::getAge).reserved().thenComparing(Comparator.comparing(UserInfo::getBirthDate)).thenComparing(Comparator.comparing(UserInfo::getUsername)));

    说明: reserved() 表示倒序排列

    若实体对象字段可能为空则Comparator.comparing(UserInfo::getAge)需修改为Comparator.comparing(UserInfo::getAgeo,Comparator.nullsLast(Date::compareTo))

    其中: nullsLast()表示空值放到最后,与之对应的为nullsFirst(),空值放到最前面
        Date表示UserInfo的age字段的数据类型
    thenComparing(Comparator<? super T> other) //然后,再去比较.

    Comparator其他方法:可自行百度如何使用。

    compare()
    equals()
    reversed() //倒序
    thenComparing(Comparator<? super T> other) //然后,再去比较.
    thenComparing( Function<? super T, ? extends U> keyExtractor,
                Comparator<? super U> keyComparator) //先通过第一个比较器,再执行第二个比较器...串联
    thenComparing()
    thenComparingInt()
    thenComparingLong()
    thenComparingDouble()
      
    reverseOrder()
    naturalOrder()
    nullsFirst()
    nullsLast()
    comparing () //静态方法
    comparing()
    comparingInt()
    comparingLong()
    comparingDouble()




  • 相关阅读:
    case 条件语句
    shell 函数
    if条件语句
    IP地址分类和分段
    shell脚本的条件测试与比较
    bc命令
    [LeetCode]Remove Duplicates from Sorted Array II
    [LeetCode]Merge Two Sorted Lists
    [LeetCode]Climbing Stairs
    [LeetCode]Merge Intervals
  • 原文地址:https://www.cnblogs.com/e-x-c-e-ption/p/13679577.html
Copyright © 2020-2023  润新知