使用java 8 stream 排序LIst 以及自訂物件比較器
主要比較的是時間,但時間為最近時間,java中compareto方法比較的ACSII碼所以2020和2021肯定是0在前面,但是我們需要的是最近的日期在前面,所以我們對返回的結果做出來取反,正常情況對象1的edittime和對象2的time比較的是如果物件1的time小於物件2的time就會回傳1 ,所有我們會發現2020在前面,我們只需要取反,因為compareto 的結果只有三種一種是1 升序,-1降序, 0是相等的意思( String類別實作了Comparable介面。
CompareTo方法相等回傳0,升序回傳1,降序回傳-1),這裡可以理解為什麼取反嗎?
因為取反之後2021-09-06的就可以在前面啦。就可以按照最近時間的順序進行排序啦。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
我們在處理資料的時候經常會需要進行排序後再返回給前端調用,例如按照時間升序排序,前端展示資料就是按時間先後進行排序。
這裡可以運用stream的sorted()方法來進行自訂的排序
這裡舉例資料是一個list集合,Listlist, Data實體類別中有許多屬性,其中有時間字段,month 月份,那我們用stream().sorted()方法排序時,因為元素是類別引用類型,需要自訂一個比較器Comparator,按month月份進行升序排序。
程式碼如下:
1 |
|
注意:
這裡比較器裡面參數用了Lambda 表達式,new Integer(o.getMonth()) ,這種封裝成Integer類型的是因為我們設計的Data實體類別中的month屬性是String類型,並非Integer,轉換成Integer是為了後續做月份遍歷判斷,如果屬性是Integer Month,則可以比較器中可以直接定義類別的方法引用
如下:
1 |
|
以上是Java 8中使用流和自訂比較器進行排序的方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!