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

Java8 Comparator源碼演示及解析

 更新時(shí)間:2019年11月07日 09:25:59   作者:Demrystv  
這篇文章主要介紹了Java8 Comparator源碼演示及解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在前面一篇Java Comparable和Comparator對(duì)比詳解中,對(duì)于java中的排序方法進(jìn)行比較和具體剖析,主要是針對(duì) Comparator接口和 Comparable接口,無(wú)論是哪種方式,都需要實(shí)現(xiàn)這個(gè)接口,并且重寫里面的 方法。

Java8中對(duì)其進(jìn)行了優(yōu)化,直接調(diào)用Comparator類即可實(shí)現(xiàn)一些自定義的排序功能,比如按照某個(gè)字段升序,并且按照某個(gè)字段降序排列;還有如果出現(xiàn)null 的情況怎么處理等等。下面是針對(duì)常見的 基礎(chǔ)數(shù)據(jù)類型的list 和 對(duì)象的集合 進(jìn)行排序的演示。

/**
 * 關(guān)于 java8 中的 Comparator 排序方法
 */
public class CompareController2 {

  public static void main(String[] args) {

    /**
     * 對(duì)常見的list等進(jìn)行升序和降序
     */
    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);

    /**
     * 對(duì)于 對(duì)象的排序
     */
    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的源碼解析

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

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

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

3)最后來(lái)看下比較有趣的 nullsFirst 方法和 nullsLast 方法,兩個(gè)方法其實(shí)主要就是 nullFirst的標(biāo)志位不同,其底層仍然是 實(shí)現(xiàn) compare方法,只不過加了一個(gè)對(duì)于null 的判斷,還有一個(gè)是根據(jù) nullFirst的標(biāo)志位 的判斷。Get !!!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

孙吴县| 秭归县| 轮台县| 昭平县| 甘孜| 漳州市| 封开县| 邯郸市| 突泉县| 泰顺县| 洛阳市| 西青区| 错那县| 吉首市| 遂昌县| 汉沽区| 澄城县| 武冈市| 周宁县| 顺义区| 庄浪县| 焦作市| 津南区| 紫金县| 婺源县| 马鞍山市| 沛县| 开化县| 聂荣县| 海宁市| 遵义市| 高邑县| 鹰潭市| 仁布县| 时尚| 军事| 永泰县| 寻乌县| 无棣县| 大竹县| 木里|