Java?List排序4種寫法整理
一:集合元素是基本類型包裝類型
public static void main(String[] args) {
List<Integer> numList=new ArrayList<>();
numList.add(999);
numList.add(123);
numList.add(456);
numList.add(66);
numList.add(9);
Collections.sort(numList); //使用Collections類的方法排序
numList.sort(new Comparator<Integer>() {//使用List接口的方法排序
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
//lambda表達式實現(xiàn)List接口sort方法排序
numList.sort((num1,num2)->{return num1.compareTo(num2);});
System.out.println(numList);
}二:對象的集合根據(jù)某個屬性排序
例如:對User對象集合根據(jù)User類的age屬性排序,默認(rèn)是升序。不推薦,不推薦,不推薦
public static void main(String[] args) {
List<User> numList=new ArrayList<>();
User u=new User();
u.setAge(12);
numList.add(u);
User u1=new User();
u1.setAge(34);
numList.add(u1);
User u2=new User();
u2.setAge(6);
numList.add(u2);
User u3=new User();
u3.setAge(99);
numList.add(u3);
//Collections類的sort方法對對象集合排序,要傳集合和Comparator接口兩個參數(shù)
Collections.sort(numList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
Integer age1= o1.getAge();
Integer age2= o2.getAge();
return age1.compareTo(age2);
}
});
//List接口自身的sort方法對對象集合排序,重寫Comparator接口方法即可
numList.sort(new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
Integer age1= u1.getAge();
Integer age2= u2.getAge();
return age1.compareTo(age2);
}
});
//List接口的sort方法,lambda表達式寫法
numList.sort((u4,u5)->{
Integer age1= u4.getAge();
Integer age2= u5.getAge();
return age1.compareTo(age2);
});
System.out.println(numList);
}三:使用Stream流排序
1.首先你需要
list.parallelStream().sorted進行流處理,使用parallelStream可以充分調(diào)度多核CPU。
2.使用Comparator.comparing進行排序,reversed()進行倒序排列,thenComparing進行下一個排序。
3.Comparator.comparing()里面的內(nèi)容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword4.最后格式化為需要的格式List是.collect(Collectors.toList()), Map 是.collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))
根據(jù)年齡倒序排
public static void main(String[] args) {
List<User> numList=new ArrayList<>();
User u=new User();
u.setAge(12);
numList.add(u);
User u1=new User();
u1.setAge(34);
numList.add(u1);
User u2=new User();
u2.setAge(6);
numList.add(u2);
User u3=new User();
u3.setAge(99);
numList.add(u3);
numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
}先對學(xué)生的班級做排序,然后同班級做倒序
public static void main(String[] args) {
List<User> numList=new ArrayList<>();
User u=new User();
u.setClass(1);
u.setAge(12);
numList.add(u);
User u1=new User();
u.setClass(1);
u1.setAge(34);
numList.add(u1);
User u2=new User();
u.setClass(2);
u2.setAge(6);
numList.add(u2);
User u3=new User();
u.setClass(2);
u3.setAge(99);
numList.add(u3);
numList = numList.parallelStream().sorted(
Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)
).collect(Collectors.toList());
}當(dāng)集合中存在null元素時,可以使用針對null友好的比較器,null元素排在集合的最前面:nullsFirst
public static void main(String[] args) {
List<User> numList=new ArrayList<>();
User u=new User();
u.setClass(1);
u.setAge(12);
numList.add(u);
User u1=new User();
u.setClass(1);
u1.setAge(34);
numList.add(u1);
User u2=new User();
u.setClass(2);
u2.setAge(6);
numList.add(u2);
User u3=new User();
u.setClass(2);
u3.setAge(99);
numList.add(u3);
numList = numList.parallelStream().sorted(
Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)
).collect(Collectors.toList());
}部分參考:http://www.dbjr.com.cn/article/232963.htm
總結(jié)
到此這篇關(guān)于Java List排序4種寫法整理的文章就介紹到這了,更多相關(guān)Java List排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot2 整合Ehcache組件,輕量級緩存管理的原理解析
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級緩存管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Java實現(xiàn)經(jīng)典游戲超級瑪麗的示例代碼
在你的童年記憶里,是否有一個蹦跳、頂蘑菇的小人?本文將用java語言實現(xiàn)經(jīng)典游戲《超級瑪麗》,文中采用了swing技術(shù)進行了界面化處理,需要的可以參考一下2022-02-02
AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解
這篇文章主要介紹了Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解,RESTful API設(shè)計的最佳實踐是使用路徑參數(shù)來標(biāo)識一個或多個特定資源,而使用查詢參數(shù)來對這些資源進行排序/過濾,需要的朋友可以參考下2024-01-01
Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body
這篇文章主要介紹了Springboot如何設(shè)置過濾器及重復(fù)讀取request里的body,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

