欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA像SQL一樣對List對象集合進(jìn)行排序

 更新時(shí)間:2020年07月20日 15:49:40   作者:字母哥博客  
這篇文章主要介紹了JAVA像SQL一樣對List對象集合進(jìn)行排序的實(shí)現(xiàn)方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

在開始之前,我先賣個(gè)關(guān)子提一個(gè)問題:假設(shè)我們有一個(gè)Movie類,這個(gè)類有三個(gè)成員變量分別是starred(是否收藏), title(電影名稱), rating(評分)。你知道怎么對一個(gè)Movie對象組成的List集合,先按照是否收藏字段倒序排序,再按照評分的倒序進(jìn)行排序么?如果您不知道4行代碼以內(nèi)的解決方案(其實(shí)是1行代碼就可以實(shí)現(xiàn),但筆者格式化為4行),我覺得您有必要一步步的看下去。

在java 8 之前,實(shí)現(xiàn)對象Collection排序,集合中被排序和比較大小的對象得實(shí)現(xiàn)Comparable接口。在java 8之后,有了Comparator比較器的概念,使用Comparator完成對象數(shù)組的排序更加方便快捷,下面就給大家簡單的介紹一下java 8中使用Comparator排序的方法。

一、字符串List排序

  • cities是一個(gè)字符串?dāng)?shù)組。注意london的首字母是小寫的。
  • 當(dāng)使用sort方法,按照String.CASE_INSENSITIVE_ORDER(字母大小寫不敏感)的規(guī)則排序,結(jié)果是:[london, Milan, New Delhi, San Francisco, Tokyo]
  • 如果使用Comparator.naturalOrder()字母自然順序排序,結(jié)果是:[Milan, New Delhi, San Francisco, Tokyo, london]

在java 7我們是使用Collections.sort()接受一個(gè)數(shù)組參數(shù),對數(shù)組進(jìn)行排序。在java 8之后可以直接調(diào)用集合類的sort()方法進(jìn)行排序。sort()方法可以傳入一個(gè)字符串的排序規(guī)則,如:String.CASE_INSENSITIVE_ORDER,也可以傳入一個(gè)排序器Comparator.naturalOrder()作為參數(shù)。

二、整數(shù)類型List排序

按數(shù)字的自然順序排序,結(jié)果是[1, 2, 4, 6, 9]

三、按對象字段對對象List排序

這個(gè)功能就比較有意思了,舉個(gè)例子大家理解一下。假設(shè)我們有一個(gè)類Movie,有三個(gè)成員變量分別是starred(是否收藏), title(電影名稱), rating(評分)。

  • 首先,我們創(chuàng)建了四個(gè)Movie對象,然后將它們轉(zhuǎn)換為List
  • 然后重點(diǎn)的的代碼:使用了函數(shù)應(yīng)用Movie::getTitle作為對象的排序字段,即按照電影的title作為排序字段
  • 然后調(diào)用List的forEach方法將List排序結(jié)果打印出來,如下(當(dāng)然我們重寫了toString方法,不然打印結(jié)果沒有意義):

  • 如果我們希望List按照Title的倒序排序,就使用reversed()方法。如:Comparator.comparing(Movie::getTitle).reversed()。

四、使用自定義Comparator排序

我們自定義一個(gè)排序器,實(shí)現(xiàn)compare函數(shù)。返回0表示元素相等,-1表示前一個(gè)元素小于后一個(gè)元素,1表示前一個(gè)元素大于后一個(gè)元素。這個(gè)規(guī)則似乎和java 8之前沒什么區(qū)別。

最終的打印結(jié)果如下,按照started的自定義規(guī)則進(jìn)行排序。

這段代碼如果以lambda表達(dá)式簡寫。箭頭左側(cè)是參數(shù),右側(cè)是函數(shù)體,參數(shù)類型和返回值根據(jù)上下文自動(dòng)判斷。如下:

五、通過Comparator鏈對對象List排序

 

上面這段代碼先是按是否收藏的倒序排序,再按照電影的評分大小的倒序排序,排序結(jié)果如下:

以上就是JAVA像SQL一樣對List對象集合進(jìn)行排序的詳細(xì)內(nèi)容,更多關(guān)于JAVA 對list集合排序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mybatis?實(shí)現(xiàn)多層級collection嵌套

    mybatis?實(shí)現(xiàn)多層級collection嵌套

    這篇文章主要介紹了mybatis?實(shí)現(xiàn)多層級collection嵌套,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中使用patchca生成超炫的驗(yàn)證碼

    Java中使用patchca生成超炫的驗(yàn)證碼

    這篇文章主要介紹了Java中使用patchca生成超炫的驗(yàn)證碼 的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Eclipse快捷鍵使用小結(jié)

    Eclipse快捷鍵使用小結(jié)

    Eclipse是用java的同行必不可少的工具,我總結(jié)了一下它的快捷鍵,太常用的ctrl+單擊、ctrl+shift+F、Ctrl+1等我就不細(xì)說了,主要是方便查看。下邊小編就詳細(xì)的為大家介紹一下
    2013-07-07
  • SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    這篇文章主要介紹了SpringBoot2 參數(shù)管理實(shí)踐,入?yún)⒊鰠⑴c校驗(yàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • Java虛擬機(jī)之對象創(chuàng)建過程與類加載機(jī)制及雙親委派模型

    Java虛擬機(jī)之對象創(chuàng)建過程與類加載機(jī)制及雙親委派模型

    這篇文章主要給大家介紹了關(guān)于Java虛擬機(jī)之對象創(chuàng)建過程與類加載機(jī)制及雙親委派模型的相關(guān)資料,本文通過示例代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 為什么Spring和IDEA都不推薦使用 @Autowired 注解

    為什么Spring和IDEA都不推薦使用 @Autowired 注解

    本文主要介紹了為什么Spring和IDEA都不推薦使用 @Autowired 注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測試的示例詳解

    在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測試的示例詳解

    Mockito特別適用于在Spring Boot環(huán)境中進(jìn)行單元測試,因?yàn)樗軌蜉p松模擬Spring應(yīng)用中的服務(wù)、存儲庫、客戶端和其他組件,通過使用Mockito,開發(fā)者可以模擬外部依賴,從而使單元測試更加獨(dú)立和可靠,本文給大家介紹了在Spring Boot環(huán)境中使用Mockito進(jìn)行單元測試
    2024-01-01
  • springboot如何初始化執(zhí)行sql語句

    springboot如何初始化執(zhí)行sql語句

    這篇文章主要介紹了springboot初始化執(zhí)行sql語句的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringMVC請求/響應(yīng)亂碼問題解決方案解析

    SpringMVC請求/響應(yīng)亂碼問題解決方案解析

    這篇文章主要介紹了SpringMVC請求/響應(yīng)亂碼問題解決方案解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能)

    Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能)

    這篇文章主要介紹了Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評論