最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

java8 stream排序及自定義比較器

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

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

CompareTo方法相等返回0,升序返回1,降序返回-1),這里可以理解為什么取反嗎?

因?yàn)槿》粗?021-09-06的就可以在前面啦。就可以按照最近時(shí)間的順序進(jìn)行排序啦。

如果有的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);

        //默認(rèn)按edittime排序,如果時(shí)間相同或者為空,則按照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排序問題

我們?cè)谔幚頂?shù)據(jù)的時(shí)候經(jīng)常會(huì)需要進(jìn)行排序后再返回給前端調(diào)用,比如按照時(shí)間升序排序,前端展示數(shù)據(jù)就是按時(shí)間先后進(jìn)行排序。

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

說下用法

這里舉例數(shù)據(jù)是一個(gè)list集合,List<Data>list,Data實(shí)體類中有許多屬性,其中有時(shí)間字段,month 月份,那我們用stream().sorted()方法排序時(shí),因?yàn)樵厥穷愐妙愋?,需要自定義一個(gè)比較器Comparator,按month月份進(jìn)行升序排序。

代碼如下:

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

注意:

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

如下:

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

總結(jié)

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

相關(guān)文章

  • springboot 攔截器執(zhí)行兩次的解決方案

    springboot 攔截器執(zhí)行兩次的解決方案

    這篇文章主要介紹了springboot 攔截器執(zhí)行兩次的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • HarmonyOS實(shí)現(xiàn)Java端類似Nine-Patch氣泡聊天框代碼

    HarmonyOS實(shí)現(xiàn)Java端類似Nine-Patch氣泡聊天框代碼

    在HarmonyOS Java端實(shí)現(xiàn)氣泡聊天框,與Android 上的9圖(Nine-Patch)有相似的實(shí)現(xiàn)方式,在HarmonyOS中,可以使用ShapeElement和ElementContainer來創(chuàng)建和管理可伸縮的氣泡背景,下面提供一個(gè)簡(jiǎn)單的示例代碼,可以在 HarmonyOS 中實(shí)現(xiàn)類似于Android的Nine-Patch氣泡聊天框效果
    2024-07-07
  • java使用Socket實(shí)現(xiàn)文件上傳功能

    java使用Socket實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了java使用Socket實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java 基于AQS實(shí)現(xiàn)自定義同步器的示例

    Java 基于AQS實(shí)現(xiàn)自定義同步器的示例

    這篇文章主要介紹了Java 基于AQS實(shí)現(xiàn)自定義同步器的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    Java服務(wù)端返回Long整型數(shù)據(jù)給前端,JS會(huì)自動(dòng)轉(zhuǎn)換為Number類型,本文主要介紹了SpringBoot返回前端Long類型字段丟失精度問題及解決方案,感興趣的可以了解一下
    2024-03-03
  • mybatis-plus?查詢傳入?yún)?shù)Map,返回List<Map>方式

    mybatis-plus?查詢傳入?yún)?shù)Map,返回List<Map>方式

    這篇文章主要介紹了mybatis-plus?查詢傳入?yún)?shù)Map,返回List<Map>方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis-Plus中and()和or()的使用與原理詳解

    Mybatis-Plus中and()和or()的使用與原理詳解

    最近發(fā)現(xiàn)MyBatisPlus還是挺好用的,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus中and()和or()的使用與原理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • IDEA Maven依賴下載總是失敗的幾種解決方法

    IDEA Maven依賴下載總是失敗的幾種解決方法

    我們本地使用 IDEA 運(yùn)行 maven 項(xiàng)目的時(shí)候,有時(shí)候運(yùn)氣不好,就會(huì)遇到某些 maven 依賴無法正常找到、導(dǎo)入,這就會(huì)導(dǎo)致 IDEA 構(gòu)建項(xiàng)目的時(shí)候爆出一堆醒目的紅色 Error,今天給大家分享IDEA Maven依賴下載總是失敗的幾種解決方法,感興趣的朋友一起看看吧
    2023-09-09
  • Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用

    Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用

    今天小編就為大家分享一篇關(guān)于Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    這篇文章主要介紹了使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論

托里县| 本溪| 美姑县| 萨嘎县| 延长县| 兴安县| 保靖县| 绥阳县| 高阳县| 顺昌县| 潮州市| 常州市| 香格里拉县| 宁都县| 江都市| 三门峡市| 临澧县| 乐山市| 普安县| 大宁县| 黔西| 永胜县| 大庆市| 泾源县| 轮台县| 肥西县| 邮箱| 巴彦县| 孝昌县| 迭部县| 龙井市| 深水埗区| 博湖县| 肥乡县| 清徐县| 宝鸡市| 南和县| 平原县| 苍溪县| 桂林市| 英山县|