欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java8?stream排序以及自定義比較器方式

 更新時間:2023年03月23日 09:38:43   作者:zhang19age_  
這篇文章主要介紹了java8?stream排序以及自定義比較器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java8 stream排序及自定義比較器

使用java 8 stream 排序 LIst 以及自定義對象比較器

主要比較的是時間,但是時間為最近時間,java中compareto方法比較的ACSII碼所以2020和2021肯定是0在前面,但是我們需要的是最近的日期在前面,所以我們對返回的結(jié)果做出來取反,正常情況 對象1的edittime和對象2的time比較的是 如果對象1的time小于對象2的time就會返回 1 ,所有我們會發(fā)現(xiàn)2020在前面,我們只需要取反,因為 compareto 的結(jié)果只有三種 一種是1 升序,-1降序, 0是相等的意思( String類實現(xiàn)了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排序問題

我們在處理數(shù)據(jù)的時候經(jīng)常會需要進行排序后再返回給前端調(diào)用,比如按照時間升序排序,前端展示數(shù)據(jù)就是按時間先后進行排序。

這里可以運用stream的sorted()方法來進行自定義的排序

說下用法

這里舉例數(shù)據(jù)是一個list集合,List<Data>list,Data實體類中有許多屬性,其中有時間字段,month 月份,那我們用stream().sorted()方法排序時,因為元素是類引用類型,需要自定義一個比較器Comparator,按month月份進行升序排序。

代碼如下:

list.stream().sorted(Comparator.comparing(o->new Integer(o.getMonth()))).collect(Collectors.toList());

注意:

這里比較器里面參數(shù)用了Lambda 表達式,new Integer(o.getMonth()) ,這種封裝成Integer類型的是因為我們設計的Data實體類中的month屬性是String類型,并非Integer,轉(zhuǎn)換成Integer是為了后續(xù)做月份遍歷判斷,如果屬性是Integer Month,則可以比較器中可以直接定義類的方法引用

如下:

list.stream().sorted(Comparator.comparing(Data::getMonth).collect(Collectors.toList());

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA中static方法的用法實例詳解

    JAVA中static方法的用法實例詳解

    這篇文章主要介紹了JAVA中static方法的用法,結(jié)合實例形式較為詳細的分析了Java中static方法的功能、使用技巧與相關(guān)注意事項,需要的朋友可以參考下
    2015-12-12
  • java實現(xiàn)二分法查找出數(shù)組重復數(shù)字

    java實現(xiàn)二分法查找出數(shù)組重復數(shù)字

    這篇文章主要為大家詳細介紹了java實現(xiàn)二分法查找出數(shù)組重復數(shù)字,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • java使用dbcp2數(shù)據(jù)庫連接池

    java使用dbcp2數(shù)據(jù)庫連接池

    這篇文章主要為大家詳細介紹了java使用dbcp2數(shù)據(jù)庫連接池的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 使用spring整合Quartz實現(xiàn)—定時器功能

    使用spring整合Quartz實現(xiàn)—定時器功能

    這篇文章主要介紹了使用spring整合Quartz實現(xiàn)—定時器功能,不基于特定的基類的方法,需要的朋友可以參考下
    2018-04-04
  • java求兩個數(shù)中的大數(shù)(實例講解)

    java求兩個數(shù)中的大數(shù)(實例講解)

    下面小編就為大家?guī)硪黄猨ava求兩個數(shù)中的大數(shù)(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java 編程中十個處理異常的建議

    Java 編程中十個處理異常的建議

    這篇文章主要介紹了Java 編程中十個處理異常的建議,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 一文弄懂Mybatis中介者模式

    一文弄懂Mybatis中介者模式

    本文主要介紹了一文弄懂Mybatis中介者模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java8中stream和functional interface的配合使用詳解

    Java8中stream和functional interface的配合使用詳解

    這篇文章主要給大家介紹了關(guān)于Java8中stream和functional interface配合使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java8具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-11-11
  • Java 數(shù)據(jù)庫連接池 Tomcat介紹

    Java 數(shù)據(jù)庫連接池 Tomcat介紹

    這篇文章主要給大家分享了 Java 數(shù)據(jù)庫連接池 Tomcat介紹,omcat 是一個小型的輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。下面來看看文章內(nèi)容的詳細介紹吧
    2021-11-11
  • java短信驗證碼獲取次數(shù)限制實例

    java短信驗證碼獲取次數(shù)限制實例

    這篇文章主要介紹了java短信驗證碼獲取次數(shù)限制實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論