91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA如何像SQL一樣對List對象集合進行排序

發布時間:2020-07-21 09:09:30 來源:億速云 閱讀:446 作者:小豬 欄目:開發技術

這篇文章主要講解了JAVA如何像SQL一樣對List對象集合進行排序,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

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

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

一、字符串List排序

JAVA如何像SQL一樣對List對象集合進行排序

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

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

二、整數類型List排序

JAVA如何像SQL一樣對List對象集合進行排序

按數字的自然順序排序,結果是[1, 2, 4, 6, 9]

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

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

JAVA如何像SQL一樣對List對象集合進行排序

  • 首先,我們創建了四個Movie對象,然后將它們轉換為List
  • 然后重點的的代碼:使用了函數應用Movie::getTitle作為對象的排序字段,即按照電影的title作為排序字段
  • 然后調用List的forEach方法將List排序結果打印出來,如下(當然我們重寫了toString方法,不然打印結果沒有意義):

JAVA如何像SQL一樣對List對象集合進行排序

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

四、使用自定義Comparator排序

我們自定義一個排序器,實現compare函數。返回0表示元素相等,-1表示前一個元素小于后一個元素,1表示前一個元素大于后一個元素。這個規則似乎和java 8之前沒什么區別。

JAVA如何像SQL一樣對List對象集合進行排序

最終的打印結果如下,按照started的自定義規則進行排序。

JAVA如何像SQL一樣對List對象集合進行排序

這段代碼如果以lambda表達式簡寫。箭頭左側是參數,右側是函數體,參數類型和返回值根據上下文自動判斷。如下:

JAVA如何像SQL一樣對List對象集合進行排序

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

 JAVA如何像SQL一樣對List對象集合進行排序

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

JAVA如何像SQL一樣對List對象集合進行排序

看完上述內容,是不是對JAVA如何像SQL一樣對List對象集合進行排序有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晋江市| 榆中县| 三原县| 象州县| 奉节县| 峨眉山市| 玛纳斯县| 达拉特旗| 中阳县| 张家川| 抚州市| 盐边县| 冕宁县| 丰县| 喜德县| 海林市| 彰化县| 赤壁市| 富川| 南平市| 仁怀市| 甘泉县| 如东县| 济宁市| 浪卡子县| 故城县| 密山市| 许昌市| 苍山县| 荔浦县| 滕州市| 仁化县| 大足县| 新泰市| 承德县| 孝义市| 镇远县| 松潘县| 吴江市| 宜良县| 新乡市|