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屬性排序,默認是升序。不推薦,不推薦,不推薦
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可以充分調度多核CPU。
2.使用Comparator.comparing進行排序,reversed()進行倒序排列,thenComparing進行下一個排序。
3.Comparator.comparing()里面的內容,也是就是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());
}先對學生的班級做排序,然后同班級做倒序
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());
}當集合中存在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.fzitv.net/article/232963.htm
總結
到此這篇關于Java List排序4種寫法整理的文章就介紹到這了,更多相關Java List排序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot+?Sharding?Sphere?輕松實現(xiàn)數(shù)據(jù)庫字段加解密功能
在Spring?Boot生態(tài)中,有一個非常厲害的開源框架:Apache?ShardingSphere,它是一款分布式?SQL?事務和查詢引擎,可通過數(shù)據(jù)分片、彈性伸縮、加密等能力對任意數(shù)據(jù)庫進行增強,今天通過這篇文章,我們一起來了解一下如何在?Spring?Boot?中快速實現(xiàn)數(shù)據(jù)的加解密功能2024-07-07
SpringBoot JdbcTemplate批量操作的示例代碼
本篇文章主要介紹了SpringBoot JdbcTemplate批量操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
基于Jenkins+Maven+Gitea+Nexus搭建CICD環(huán)境的方式
這篇文章主要介紹了基于Jenkins+Maven+Gitea+Nexus從0到1搭建CICD環(huán)境,大家都知道Nexus是一套“開箱即用”的系統(tǒng)不需要數(shù)據(jù)庫,它使用文件系統(tǒng)加Lucene來組織數(shù)據(jù),需要的朋友可以參考下2022-01-01
Spring Boot與MyBatis配置與操作實戰(zhàn)指南
本文介紹了如何在SpringBoot項目中配置和使用MyBatis,包括環(huán)境準備、數(shù)據(jù)源配置、MyBatis配置、數(shù)據(jù)操作、事務管理以及高級配置如緩存和插件的使用,通過這些步驟,可以實現(xiàn)高效的數(shù)據(jù)驅動應用程序開發(fā),感興趣的朋友跟隨小編一起看看吧2026-01-01
Spring?Boot?實現(xiàn)?IP?限流的原理、實踐與利弊解析
在Spring?Boot中實現(xiàn)IP限流是一種簡單而有效的方式來保障系統(tǒng)的穩(wěn)定性和可用性,本文給大家介紹Spring?Boot實現(xiàn)IP限流:原理、實踐與利弊分析,感興趣的朋友跟隨小編一起看看吧2025-06-06
關于Idea的Invalidate Caches/Restart使用
項目類導入爆紅可能因Idea緩存異常導致Maven依賴識別失敗,解決方法為通過Invalidate Caches/Restart清除緩存,等待重新構建索引后重新進入項目2025-07-07

