JAVA像SQL一樣對List對象集合進行排序
在開始之前,我先賣個關子提一個問題:假設我們有一個Movie類,這個類有三個成員變量分別是starred(是否收藏), title(電影名稱), rating(評分)。你知道怎么對一個Movie對象組成的List集合,先按照是否收藏字段倒序排序,再按照評分的倒序進行排序么?如果您不知道4行代碼以內(nèi)的解決方案(其實是1行代碼就可以實現(xiàn),但筆者格式化為4行),我覺得您有必要一步步的看下去。
在java 8 之前,實現(xiàn)對象Collection排序,集合中被排序和比較大小的對象得實現(xiàn)Comparable接口。在java 8之后,有了Comparator比較器的概念,使用Comparator完成對象數(shù)組的排序更加方便快捷,下面就給大家簡單的介紹一下java 8中使用Comparator排序的方法。
一、字符串List排序
- cities是一個字符串數(shù)組。注意london的首字母是小寫的。
- 當使用sort方法,按照String.CASE_INSENSITIVE_ORDER(字母大小寫不敏感)的規(guī)則排序,結果是:[london, Milan, New Delhi, San Francisco, Tokyo]
- 如果使用Comparator.naturalOrder()字母自然順序排序,結果是:[Milan, New Delhi, San Francisco, Tokyo, london]
在java 7我們是使用Collections.sort()接受一個數(shù)組參數(shù),對數(shù)組進行排序。在java 8之后可以直接調(diào)用集合類的sort()方法進行排序。sort()方法可以傳入一個字符串的排序規(guī)則,如:String.CASE_INSENSITIVE_ORDER,也可以傳入一個排序器Comparator.naturalOrder()作為參數(shù)。
二、整數(shù)類型List排序
按數(shù)字的自然順序排序,結果是[1, 2, 4, 6, 9]
三、按對象字段對對象List排序
這個功能就比較有意思了,舉個例子大家理解一下。假設我們有一個類Movie,有三個成員變量分別是starred(是否收藏), title(電影名稱), rating(評分)。
- 首先,我們創(chuàng)建了四個Movie對象,然后將它們轉換為List
- 然后重點的的代碼:使用了函數(shù)應用Movie::getTitle作為對象的排序字段,即按照電影的title作為排序字段
- 然后調(diào)用List的forEach方法將List排序結果打印出來,如下(當然我們重寫了toString方法,不然打印結果沒有意義):
- 如果我們希望List按照Title的倒序排序,就使用reversed()方法。如:Comparator.comparing(Movie::getTitle).reversed()。
四、使用自定義Comparator排序
我們自定義一個排序器,實現(xiàn)compare函數(shù)。返回0表示元素相等,-1表示前一個元素小于后一個元素,1表示前一個元素大于后一個元素。這個規(guī)則似乎和java 8之前沒什么區(qū)別。
最終的打印結果如下,按照started的自定義規(guī)則進行排序。
這段代碼如果以lambda表達式簡寫。箭頭左側是參數(shù),右側是函數(shù)體,參數(shù)類型和返回值根據(jù)上下文自動判斷。如下:
五、通過Comparator鏈對對象List排序
上面這段代碼先是按是否收藏的倒序排序,再按照電影的評分大小的倒序排序,排序結果如下:
以上就是JAVA像SQL一樣對List對象集合進行排序的詳細內(nèi)容,更多關于JAVA 對list集合排序的資料請關注腳本之家其它相關文章!
- Java8 使用 stream().sorted()對List集合進行排序的操作
- Java如何實現(xiàn)List自定義排序
- java list集合排序按某一屬性排序操作
- 如何基于Java實現(xiàn)對象List排序
- Java List集合排序?qū)崿F(xiàn)方法解析
- Java使用Collections工具類對List集合進行排序
- java8新特性將List中按指定屬性排序過濾重復數(shù)據(jù)的方法
- Java8 用Lambda表達式給List集合排序的實現(xiàn)
- Java實現(xiàn)對兩個List快速去重并排序操作示例
- Java中對list map根據(jù)map某個key值進行排序的方法
- Java針對ArrayList自定義排序的2種實現(xiàn)方法
- Java基礎之List內(nèi)元素的排序性能對比
相關文章
mybatis?實現(xiàn)多層級collection嵌套
這篇文章主要介紹了mybatis?實現(xiàn)多層級collection嵌套,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot2 參數(shù)管理實踐之入?yún)⒊鰠⑴c校驗的方式
這篇文章主要介紹了SpringBoot2 參數(shù)管理實踐,入?yún)⒊鰠⑴c校驗,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-06-06Java虛擬機之對象創(chuàng)建過程與類加載機制及雙親委派模型
這篇文章主要給大家介紹了關于Java虛擬機之對象創(chuàng)建過程與類加載機制及雙親委派模型的相關資料,本文通過示例代碼以及圖文介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友可以參考下2021-11-11為什么Spring和IDEA都不推薦使用 @Autowired 注解
本文主要介紹了為什么Spring和IDEA都不推薦使用 @Autowired 注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04在SpringBoot環(huán)境中使用Mockito進行單元測試的示例詳解
Mockito特別適用于在Spring Boot環(huán)境中進行單元測試,因為它能夠輕松模擬Spring應用中的服務、存儲庫、客戶端和其他組件,通過使用Mockito,開發(fā)者可以模擬外部依賴,從而使單元測試更加獨立和可靠,本文給大家介紹了在Spring Boot環(huán)境中使用Mockito進行單元測試2024-01-01Java實現(xiàn)在線考試系統(tǒng)與設計(學生功能)
這篇文章主要介紹了Java實現(xiàn)在線考試系統(tǒng)與設計(學生功能),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02