Java?List排序4種寫(xiě)法整理
一:集合元素是基本類(lèi)型包裝類(lèi)型
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類(lèi)的方法排序 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類(lèi)的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類(lèi)的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ì)象集合排序,重寫(xiě)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á)式寫(xiě)法 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::getKeyword
4.最后格式化為需要的格式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://www.dbjr.com.cn/article/232963.htm
總結(jié)
到此這篇關(guān)于Java List排序4種寫(xiě)法整理的文章就介紹到這了,更多相關(guān)Java List排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08java多線(xiàn)程之CyclicBarrier的使用方法
這篇文章主要介紹了java多線(xiàn)程之CyclicBarrier的使用方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10如何在springboot中引入?yún)?shù)校驗(yàn)
一般我們判斷前端傳過(guò)來(lái)的參數(shù),需要對(duì)某些值進(jìn)行判斷,是否滿(mǎn)足條件,而springboot相關(guān)的參數(shù)校驗(yàn)注解,可以解決我們這個(gè)問(wèn)題,本文給大家介紹如何在springboot中引入?yún)?shù)校驗(yàn),感興趣的朋友一起看看吧2023-12-12Java實(shí)現(xiàn)經(jīng)典游戲超級(jí)瑪麗的示例代碼
在你的童年記憶里,是否有一個(gè)蹦跳、頂蘑菇的小人?本文將用java語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲《超級(jí)瑪麗》,文中采用了swing技術(shù)進(jìn)行了界面化處理,需要的可以參考一下2022-02-02mybatis-plus雪花算法自動(dòng)生成機(jī)器id原理及源碼
Mybatis-Plus是一個(gè)Mybatis的增強(qiáng)工具,它在Mybatis的基礎(chǔ)上做了增強(qiáng),卻不做改變,Mybatis-Plus是為簡(jiǎn)化開(kāi)發(fā)、提高開(kāi)發(fā)效率而生,但它也提供了一些很有意思的插件,比如SQL性能監(jiān)控、樂(lè)觀(guān)鎖、執(zhí)行分析等,下面一起看看mybatis-plus雪花算法自動(dòng)生成機(jī)器id原理解析2021-06-06AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解
這篇文章主要介紹了Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解,RESTful API設(shè)計(jì)的最佳實(shí)踐是使用路徑參數(shù)來(lái)標(biāo)識(shí)一個(gè)或多個(gè)特定資源,而使用查詢(xún)參數(shù)來(lái)對(duì)這些資源進(jìn)行排序/過(guò)濾,需要的朋友可以參考下2024-01-01ireport數(shù)據(jù)表格報(bào)表的簡(jiǎn)單使用
這篇文章給大家介紹了如何畫(huà)一個(gè)報(bào)表模板,這里介紹下畫(huà)表格需要用到的組件,文中通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-10-10Springboot如何設(shè)置過(guò)濾器及重復(fù)讀取request里的body
這篇文章主要介紹了Springboot如何設(shè)置過(guò)濾器及重復(fù)讀取request里的body,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03