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

溫馨提示×

溫馨提示×

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

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

Java8 Comparator源碼演示及解析

發布時間:2020-10-04 19:22:02 來源:腳本之家 閱讀:174 作者:Demrystv 欄目:編程語言

在前面一篇Java Comparable和Comparator對比詳解中,對于java中的排序方法進行比較和具體剖析,主要是針對 Comparator接口和 Comparable接口,無論是哪種方式,都需要實現這個接口,并且重寫里面的 方法。

Java8中對其進行了優化,直接調用Comparator類即可實現一些自定義的排序功能,比如按照某個字段升序,并且按照某個字段降序排列;還有如果出現null 的情況怎么處理等等。下面是針對常見的 基礎數據類型的list 和 對象的集合 進行排序的演示。

/**
 * 關于 java8 中的 Comparator 排序方法
 */
public class CompareController2 {

  public static void main(String[] args) {

    /**
     * 對常見的list等進行升序和降序
     */
    List<Integer> list = Arrays.asList(10,133,34,546,53,345);
    // 自然順序,升序
    list.sort(Comparator.naturalOrder());
    System.out.println(list);
    // 降序
    list.sort(Comparator.reverseOrder());
    System.out.println(list);

    /**
     * 對于 對象的排序
     */
    List<Students> studentsList = new ArrayList<>();
    studentsList.add(new Students("zhangSan", 28, "beiJing"));
    studentsList.add(new Students("liSi", 25, "shangHai"));
    studentsList.add(new Students("wangWu", 22));

    studentsList.sort(Comparator.comparing(Students::getName));
    System.out.println("按照姓名升序:" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAge).reversed());
    System.out.println("按照年齡降序:" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsLast(String::compareTo)).reversed());
    System.out.println("按照地址降序,若有空,放到最前面:" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsFirst(String::compareTo)).reversed());
    System.out.println("按照地址降序,若有空,放到最后面:" + studentsList);

    studentsList.sort(Comparator.comparing(Students::getAddress, Comparator.nullsLast(String::compareTo)).reversed().thenComparing(Students::getAge));
    System.out.println("按照地址降序,若有空,放到最前面,然后再按照年齡升序:" + studentsList);

  }
}

Comparator的源碼解析

最近的學習,讓我意識到了看源碼的重要性,所以分析完Comparator如何使用后,繼續研究源碼。

1)首先看下 comparing 的源碼,其實就是 compareTo 方法。

Java8 Comparator源碼演示及解析

2)接下看下 thenComparing 方法,其實就是 compare 方法,和我們實現某個接口并且重寫里面的方法類似,只不過 Comparator在底層幫我們實現了。

Java8 Comparator源碼演示及解析

3)最后來看下比較有趣的 nullsFirst 方法和 nullsLast 方法,兩個方法其實主要就是 nullFirst的標志位不同,其底層仍然是 實現 compare方法,只不過加了一個對于null 的判斷,還有一個是根據 nullFirst的標志位 的判斷。Get !!!

Java8 Comparator源碼演示及解析

Java8 Comparator源碼演示及解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

阿图什市| 西藏| 峨眉山市| 玛纳斯县| 通江县| 江安县| 抚顺县| 读书| 奉新县| 镇赉县| 金坛市| 阿克陶县| 安徽省| 固始县| 德庆县| 高要市| 拜城县| 灵台县| 三穗县| 明水县| 吉林省| 南丹县| 新蔡县| 砚山县| 札达县| 甘肃省| 祥云县| 佛学| 舞阳县| 鄂州市| 丰城市| 娄烦县| 繁峙县| 同德县| 凤凰县| 南通市| 石渠县| 泊头市| 东乡族自治县| 建水县| 哈密市|