亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java8?stream排序及自定義比較器的方法是什么

發布時間:2023-05-06 11:39:24 來源:億速云 閱讀:191 作者:iii 欄目:開發技術

這篇文章主要講解了“java8 stream排序及自定義比較器的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java8 stream排序及自定義比較器的方法是什么”吧!

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集合,List<Data>list,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());

感謝各位的閱讀,以上就是“java8 stream排序及自定義比較器的方法是什么”的內容了,經過本文的學習后,相信大家對java8 stream排序及自定義比較器的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海安县| 电白县| 陵川县| 县级市| 梧州市| 邢台市| 张家口市| 富裕县| 黄梅县| 嵊泗县| 晋州市| 德惠市| 阿克苏市| 雅安市| 洞头县| 望谟县| 河东区| 南宁市| 石柱| 沙洋县| 柯坪县| 永城市| 安多县| 社会| 玉田县| 花垣县| 蒙自县| 张北县| 樟树市| 民县| 新宁县| 宽城| 宁蒗| 横峰县| 南部县| 旬阳县| 淳化县| 贵南县| 兴文县| 定州市| 衡阳县|