JAVA像SQL一樣對List對象集合進行排序
在開始之前,我先賣個關(guān)子提一個問題:假設我們有一個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排序
在java 7我們是使用Collections.sort()接受一個數(shù)組參數(shù),對數(shù)組進行排序。在java 8之后可以直接調(diào)用集合類的sort()方法進行排序。sort()方法可以傳入一個字符串的排序規(guī)則,如:String.CASE_INSENSITIVE_ORDER,也可以傳入一個排序器Comparator.naturalOrder()作為參數(shù)。
二、整數(shù)類型List排序
按數(shù)字的自然順序排序,結(jié)果是[1, 2, 4, 6, 9]
三、按對象字段對對象List排序
這個功能就比較有意思了,舉個例子大家理解一下。假設我們有一個類Movie,有三個成員變量分別是starred(是否收藏), title(電影名稱), rating(評分)。
四、使用自定義Comparator排序
我們自定義一個排序器,實現(xiàn)compare函數(shù)。返回0表示元素相等,-1表示前一個元素小于后一個元素,1表示前一個元素大于后一個元素。這個規(guī)則似乎和java 8之前沒什么區(qū)別。
最終的打印結(jié)果如下,按照started的自定義規(guī)則進行排序。
這段代碼如果以lambda表達式簡寫。箭頭左側(cè)是參數(shù),右側(cè)是函數(shù)體,參數(shù)類型和返回值根據(jù)上下文自動判斷。如下:
五、通過Comparator鏈對對象List排序
上面這段代碼先是按是否收藏的倒序排序,再按照電影的評分大小的倒序排序,排序結(jié)果如下:
以上就是JAVA像SQL一樣對List對象集合進行排序的詳細內(nèi)容,更多關(guān)于JAVA 對list集合排序的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP常用日期格式化函數(shù) FormatDate()2. Python 操作 MySQL數(shù)據(jù)庫3. Python數(shù)據(jù)相關(guān)系數(shù)矩陣和熱力圖輕松實現(xiàn)教程4. 開發(fā)效率翻倍的Web API使用技巧5. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數(shù)據(jù)的代碼6. CSS3中Transition屬性詳解以及示例分享7. js select支持手動輸入功能實現(xiàn)代碼8. 什么是Python變量作用域9. vue使用moment如何將時間戳轉(zhuǎn)為標準日期時間格式10. python 如何在 Matplotlib 中繪制垂直線
