對List物件集合進行排序像sql的order by一樣
阿新 • • 發佈:2020-09-16
1.背景
原資料查詢是使用一個sql進行查詢並使用orderby 對多欄位進行排序,現在需要分批次查詢出資料全部放入list中在進行排序,需與資料庫使用order by排序一致。
2.解決辦法
在java 8之後,有了Comparator比較器,直接使用Comparator進行解決,如下:
public class UserInfo{ private Integer userId; private String username; private Date birthDate; private Integer age; privatefloat 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()