国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:46日期:2022-08-28 16:43:32

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

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

一、字符串List排序

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

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

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

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

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

三、按對(duì)象字段對(duì)對(duì)象List排序

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

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

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

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

如果我們希望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之前沒(méi)什么區(qū)別。

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

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

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

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

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

五、通過(guò)Comparator鏈對(duì)對(duì)象List排序

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

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

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

以上就是JAVA像SQL一樣對(duì)List對(duì)象集合進(jìn)行排序的詳細(xì)內(nèi)容,更多關(guān)于JAVA 對(duì)list集合排序的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 育儿| 海淀区| 黄浦区| 巴彦县| 弋阳县| 特克斯县| 望江县| 罗源县| 扎赉特旗| 荃湾区| 天台县| 岗巴县| 凯里市| 土默特右旗| 曲松县| 嘉定区| 建始县| 民乐县| 霍林郭勒市| 扎赉特旗| 台东市| 靖西县| 兴和县| 中宁县| 四川省| 葫芦岛市| 吉木乃县| 泰兴市| 阳朔县| 香格里拉县| 奉化市| 德格县| 宿迁市| 兴隆县| 木里| 清新县| 龙海市| 香港| 上林县| 金寨县| 定西市|