Java 中 List 集合排序方法

方式一:?調用List接口自己的sort方法排序

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接口的方法排序@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}});//lambda表達式實現List接口sort方法排序numList.sort((num1,num2)->{return num1.compareTo(num2);});System.out.println(numList);}

方式二:使用java.util.Collections類的sort(List list)方法

 
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接口兩個參數Collections.sort(numList, new Comparator<User>() {@Overridepublic 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>() {@Overridepublic 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);
}

注:Collections的sort方法其實是調用了List接口自己的sort方法。

方式三:使用Stream流的sort方法

  1. 首先你需要list.parallelStream().sorted 進行流處理,使用parallelStream可以充分調度多核CPU。
  2. 使用Comparator.comparing進行排序,reversed()進行倒序排列,thenComparing進行下一個排序。
  3. Comparator.comparing()里面的內容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
  4. 最后格式化為需要的格式 List 是.collect(Collectors.toList()) , Map是.collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))

1. 單字段排序?

根據年齡倒序排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());
}

2. 多字段排序?

先對學生的班級做排序,然后同班級做倒序
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());
}

3. nullsFirst 排序

當集合中存在null元素時,可以使用針對null友好的比較器,null元素排在集合的最前面

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.pswp.cn/news/40137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40137.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在一小時內構建您的深度學習應用程序

一、說明 我已經做了將近十年的數據分析。有時&#xff0c;我使用機器學習技術從數據中獲取見解&#xff0c;并且我習慣于使用經典 ML。 雖然我已經通過了神經網絡和深度學習的一些MOOC&#xff0c;但我從未在我的工作中使用過它們&#xff0c;這個領域對我來說似乎很有挑戰性。…

【Leetcode】91.解碼方法

一、題目 1、題目描述 一條包含字母 A-Z 的消息通過以下映射進行了 編碼 : A -> "1" B -> "2" ... Z -> "26"要 解碼 已編碼的消息,所有數字必須基于上述映射的方法,反向映射回字母(可能有多種方法)。例如,"11106" …

智能數據建模軟件DTEmpower 2023R2新版本功能介紹

DTEmpower是由天洑軟件自主研發的一款通用的智能數據建模軟件&#xff0c;致力于幫助工程師及工科專業學生&#xff0c;利用工業領域中的仿真、試驗、測量等各類數據進行挖掘分析&#xff0c;建立高質量的數據模型&#xff0c;實現快速設計評估、實時仿真預測、系統參數預警、設…

機器學習深度學習——自注意力和位置編碼(數學推導+代碼實現)

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位即將上大四&#xff0c;正專攻機器學習的保研er &#x1f30c;上期文章&#xff1a;機器學習&&深度學習——注意力分數&#xff08;詳細數學推導代碼實現&#xff09; &#x1f4da;訂閱專欄&#xff1a;機器學習…

Cat(2):下載與安裝

1 github源碼下載 要安裝CAT&#xff0c;首先需要從github上下載最新版本的源碼。 官方給出的建議如下&#xff1a; 注意cat的3.0代碼分支更新都發布在master上&#xff0c;包括最新文檔也都是這個分支注意文檔請用最新master里面的代碼文檔作為標準&#xff0c;一些開源網站…

node.js內置模塊fs,path,http使用方法

NodeJs中分為兩部分 一是V8引擎為了解析和執行JS代碼。 二是內置API&#xff0c;讓JS能調用這些API完成一些后端操作。 內置API模塊(fs、path、http等) 第三方API模塊(express、mysql等) fs模塊 fs.readFile()方法&#xff0c;用于讀取指定文件中的內容。 fs.writeFile()方…

MySQL— 基礎語法大全及操作演示!!!(上)

MySQL—— 基礎語法大全及操作演示&#xff08;上&#xff09; 一、MySQL概述1.1 、數據庫相關概念1.1.1 MySQL啟動和停止 1.2 、MySQL 客戶端連接1.3 、數據模型 二、SQL2.1、SQL通用語法2.2、SQL分類2.3、DDL2.3.1 DDL — 數據庫操作2.3.1 DDL — 表操作 2.4、DML2.4.1 DML—…

等保案例 5

用戶簡介 四川省人民代表大會常務委員會&#xff0c;作為省人民代表大會地常設機關&#xff0c;隨著政府部門信息化程度地提高&#xff0c;對信息系統地依賴程度越來越高&#xff0c;同時由于網絡安全形勢日益嚴峻、新型攻擊層出不窮&#xff0c;單位信息化所面臨地各種風險也…

途樂證券-寧德時代發力超充賽道,高壓快充概念強勢拉升,泰永長征漲停

高壓快充概念17日盤中強勢拉升&#xff0c;到發稿&#xff0c;泰永長征漲停&#xff0c;萬祥科技漲超9%&#xff0c;英可瑞漲逾8%&#xff0c;迦南智能漲超4%。 消息面上&#xff0c;8月16日&#xff0c;寧德時代舉行線下新品發布會&#xff0c;正式發布全球首款磷酸鐵鋰4C超充…

Spark第二課RDD的詳解

1.前言 RDD JAVA中的IO 1.小知識點穿插 1. 裝飾者設計模式 裝飾者設計模式:本身功能不變,擴展功能. 舉例&#xff1a; 數據流的讀取 一層一層的包裝&#xff0c;進而將功能進行進一步的擴展 2.sleep和wait的區別 本質區別是字體不一樣,sleep斜體,wait正常 斜體是靜態方法…

經過幾天的亂搞,已經搞出來第一次stm32點燈程序

看吧那個燈泡已經亮了 stm32跟51不同的地方是這里引腳一組16個&#xff0c;如PA0,PA1,PA2,,,,,,PA15 51一組8個 例如P00,P01,P02,,,,P07

全新重構,探尋 24 歲 QQ 大重構背后的思考

在瞬息萬變的互聯網行業中,年過二十四的 QQ 堪稱超長壽的產品,見證了中國互聯網崛起的完整歷程。然而,如今這個元老級產品經歷了一次從內到外徹底的重構。 在這次重構中,QQ 選擇了 Electron 作為 UI 跨平臺開發框架。盡管 Electron 被 Slack、Visual Studio Code 和 Disco…

[Go版]算法通關村第十一關青銅——理解位運算的規則

目錄 數字在計算機中的表示&#xff1a;機器數、真值對機器數進一步細化&#xff1a;原碼、反碼、補碼為何會有原碼、反碼和補碼為何計算機中的按位運算使用的是補碼&#xff1f;位運算規則與、或、異或和取反移位運算移位運算與乘除法的關系位運算常用技巧?? 操作某個位的數…

Unity用NPOI創建Exect表,保存數據,和修改刪除數據。以及打包后的坑——無法打開新創建的Exect表

先說坑花了一下午才找到解決方法解決&#xff0c; 在Unity編輯模式下點擊物體創建對應的表&#xff0c;獲取物體名字與在InputText填寫的注釋數據。然后保存。創建Exect表可以打開&#xff0c;打包PC后&#xff0c;點擊物體創建的表&#xff0c;打不開文件破損 解決方法&#…

大數據培訓前景怎么樣?企業需求量大嗎

大數據行業對大家來說并不陌生&#xff0c;大數據行業市場人才需求量大&#xff0c;越早入行越有優勢&#xff0c;發展機會和上升空間等大。不少人通過大數據培訓來提升自己的經驗和自身技術能力&#xff0c;以此來獲得更好的就業機會。 2023大數據培訓就業前景怎么樣呢?企業需…

ubuntu18 下更改 mysql 數據目錄

一、修改步驟 更改 MySQL 的數據目錄需要注意以下幾個步驟&#xff1a; 停止 MySQL 服務 在 Ubuntu 中&#xff0c;你可以使用以下命令停止 MySQL 服務&#xff1a; sudo systemctl stop mysql 復制現有數據 假設你的新的數據目錄是 /new/dir/mysql&#xff0c;你應該使用 rsy…

區間覆蓋 線段覆蓋 二分

4195. 線段覆蓋 - AcWing題庫 P2082 區間覆蓋&#xff08;加強版&#xff09; - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 做法&#xff1a; void solve() {int n; cin>>n;vector<array<LL,2>> seg(n);for(auto &t: seg) cin>>t[0]>>…

從視覺裝備到智能駕駛,天準科技能否打造第二增長極?

智能網聯汽車已經成為了上市公司跨界布局的熱門賽道。 天準科技是工業視覺智能裝備領域的龍頭企業&#xff0c;主要客戶包括蘋果、三星等企業。招股說明書顯示&#xff0c;2016年至2018年&#xff0c;天準科技來源于蘋果公司及其供應商的收入合計占比達到49.98%、67.99%及76.0…

Spark操作Hive表冪等性探索

前言 旁邊的實習生一邊敲著鍵盤一邊很不開心的說:做數據開發真麻煩,數據bug排查太繁瑣了,我今天數據跑的有問題,等我處理完問題重新跑了代碼,發現報表的數據很多重復,準備全部刪了重新跑。 我:你的數據操作具備冪等性嗎? 實習生:啥是冪等性?數倉中的表還要考慮冪等…

JVS開源基礎框架:平臺基本信息介紹

JVS是面向軟件開發團隊可以快速實現應用的基礎開發腳手架&#xff0c;主要定位于企業信息化通用底座&#xff0c;采用微服務分布式框架&#xff0c;提供豐富的基礎功能&#xff0c;集成眾多業務引擎&#xff0c;它靈活性強&#xff0c;界面化配置對開發者友好&#xff0c;底層容…