對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()

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM