91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

抚顺县| 宜丰县| 洮南市| 北海市| 临泽县| 芷江| 元氏县| 延吉市| 东台市| 嘉定区| 黎川县| 昭苏县| 洛川县| 绥化市| 钟山县| 宜兰县| 安吉县| 洪江市| 银川市| 南丰县| 西平县| 习水县| 台南县| 宝山区| 乌拉特中旗| 嘉荫县| 辽阳县| 丰台区| 营口市| 临西县| 黎城县| 宝应县| 历史| 大荔县| 边坝县| 清新县| 宁海县| 军事| 临沂市| 澎湖县| 南昌市|