java8 stream排序及自訂比較器
使用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的就可以在前面啦。就可以按照最近時間的順序進行排序啦。
如果有的java 8 stream 不懂的可以去看看哦 List<Map<String,Object>> resultList = null; Map<String,Object> ss1 = new HashMap<>(); ss1.put("dictcode","2"); ss1.put("DictValue","霓虹灯广告1"); ss1.put("EditTime","2021-09-16 17:47:30"); Map<String,Object> ss2 = new HashMap<>(); ss2.put("dictcode","1"); ss2.put("DictValue","霓虹灯广告2"); ss2.put("EditTime","2020-04-16 17:47:30"); Map<String,Object> ss3 = new HashMap<>(); ss3.put("dictcode","21"); ss3.put("DictValue","霓虹灯广告3"); ss3.put("EditTime","2020-09-13 17:47:30"); Map<String,Object> ss4 = new HashMap<>(); ss4.put("dictcode","3"); ss4.put("DictValue","霓虹灯广告4"); ss4.put("EditTime","2020-09-16 17:47:30"); Map<String,Object> ss5 = new HashMap<>(); ss5.put("dictcode","4"); ss5.put("DictValue","霓虹灯广告5"); ss5.put("EditTime","2020-09-16 17:47:30"); List<Map<String, Object>> maps = Arrays.asList(ss1, ss2, ss3, ss5, ss4); //默认按edittime排序,如果时间相同或者为空,则按照code排序 maps.stream().sorted((o1, o2) -> { if (StringUtils.isEmpty(o1.get("EditTime").toString()) || StringUtils.isEmpty(o2.get("EditTime").toString())) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else if (o1.get("EditTime").equals(o2.get("EditTime"))) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else if (o1.get("EditTime").toString().compareTo(o2.get("EditTime").toString()) > 0) return -1; else return 1; /*if (StringUtils.isEmpty(o1.get("EditTime").toString())||StringUtils.isEmpty(o2.get("EditTime").toString()) || o1.get("EditTime").equals(o2.get("EditTime"))) { return o1.get("dictcode").toString().compareTo(o2.get("dictcode").toString()); } else { if (o1.get("EditTime").toString().compareTo(o2.get("EditTime").toString()) >0) return -1; return 1; }*/ }).collect(Collectors.toList()).forEach(System.out::println);
java stream排序問題
我們在處理資料的時候經常會需要進行排序後再返回給前端調用,例如按照時間升序排序,前端展示資料就是按時間先後進行排序。
這裡可以運用stream的sorted()方法來進行自訂的排序
說下用法
這裡舉例資料是一個list集合,Listlist, Data實體類別中有許多屬性,其中有時間字段,month 月份,那我們用stream().sorted()方法排序時,因為元素是類別引用類型,需要自訂一個比較器Comparator,按month月份進行升序排序。
程式碼如下:
list.stream().sorted(Comparator.comparing(o->new Integer(o.getMonth()))).collect(Collectors.toList());
注意:
這裡比較器裡面參數用了Lambda 表達式,new Integer(o.getMonth()) ,這種封裝成Integer類型的是因為我們設計的Data實體類別中的month屬性是String類型,並非Integer,轉換成Integer是為了後續做月份遍歷判斷,如果屬性是Integer Month,則可以比較器中可以直接定義類別的方法引用
如下:
list.stream().sorted(Comparator.comparing(Data::getMonth).collect(Collectors.toList());
以上是Java 8中使用流和自訂比較器進行排序的方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器