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表達(dá)式實(shí)現(xiàn)List接口sort方法排序
numList.sort((num1,num2)->{return num1.compareTo(num2);});
System.out.println(numList);
}二:對(duì)象的集合根據(jù)某個(gè)屬性排序
例如:對(duì)User對(duì)象集合根據(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方法對(duì)對(duì)象集合排序,要傳集合和Comparator接口兩個(gè)參數(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方法對(duì)對(duì)象集合排序,重寫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表達(dá)式寫法
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進(jìn)行流處理,使用parallelStream可以充分調(diào)度多核CPU。
2.使用Comparator.comparing進(jìn)行排序,reversed()進(jìn)行倒序排列,thenComparing進(jìn)行下一個(gè)排序。
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());
}先對(duì)學(xué)生的班級(jí)做排序,然后同班級(jí)做倒序
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元素時(shí),可以使用針對(duì)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://m.fzitv.net/article/232963.htm
總結(jié)
到此這篇關(guān)于Java List排序4種寫法整理的文章就介紹到這了,更多相關(guān)Java List排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+?Sharding?Sphere?輕松實(shí)現(xiàn)數(shù)據(jù)庫(kù)字段加解密功能
在Spring?Boot生態(tài)中,有一個(gè)非常厲害的開源框架:Apache?ShardingSphere,它是一款分布式?SQL?事務(wù)和查詢引擎,可通過數(shù)據(jù)分片、彈性伸縮、加密等能力對(duì)任意數(shù)據(jù)庫(kù)進(jìn)行增強(qiáng),今天通過這篇文章,我們一起來了解一下如何在?Spring?Boot?中快速實(shí)現(xiàn)數(shù)據(jù)的加解密功能2024-07-07
詳解如何實(shí)現(xiàn)SpringBoot的底層注解
今天給大家?guī)淼奈恼率侨绾螌?shí)現(xiàn)SpringBoot的底層注解,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下2021-06-06
Spring?模擬轉(zhuǎn)賬開發(fā)實(shí)戰(zhàn)小結(jié)
轉(zhuǎn)賬是金融類應(yīng)用的核心場(chǎng)景之一,涉及付款方扣減金額和收款方增加金額兩個(gè)關(guān)鍵操作,本文主要介紹了Spring?模擬轉(zhuǎn)賬開發(fā)實(shí)戰(zhàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2025-05-05
SpringBoot JdbcTemplate批量操作的示例代碼
本篇文章主要介紹了SpringBoot JdbcTemplate批量操作的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
基于Jenkins+Maven+Gitea+Nexus搭建CICD環(huán)境的方式
這篇文章主要介紹了基于Jenkins+Maven+Gitea+Nexus從0到1搭建CICD環(huán)境,大家都知道Nexus是一套“開箱即用”的系統(tǒng)不需要數(shù)據(jù)庫(kù),它使用文件系統(tǒng)加Lucene來組織數(shù)據(jù),需要的朋友可以參考下2022-01-01
Spring Boot與MyBatis配置與操作實(shí)戰(zhàn)指南
本文介紹了如何在SpringBoot項(xiàng)目中配置和使用MyBatis,包括環(huán)境準(zhǔn)備、數(shù)據(jù)源配置、MyBatis配置、數(shù)據(jù)操作、事務(wù)管理以及高級(jí)配置如緩存和插件的使用,通過這些步驟,可以實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序開發(fā),感興趣的朋友跟隨小編一起看看吧2026-01-01
Spring?Boot?實(shí)現(xiàn)?IP?限流的原理、實(shí)踐與利弊解析
在Spring?Boot中實(shí)現(xiàn)IP限流是一種簡(jiǎn)單而有效的方式來保障系統(tǒng)的穩(wěn)定性和可用性,本文給大家介紹Spring?Boot實(shí)現(xiàn)IP限流:原理、實(shí)踐與利弊分析,感興趣的朋友跟隨小編一起看看吧2025-06-06
關(guān)于Idea的Invalidate Caches/Restart使用
項(xiàng)目類導(dǎo)入爆紅可能因Idea緩存異常導(dǎo)致Maven依賴識(shí)別失敗,解決方法為通過Invalidate Caches/Restart清除緩存,等待重新構(gòu)建索引后重新進(jìn)入項(xiàng)目2025-07-07

