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

Java中的排序Comparator類用法詳解

 更新時間:2023年08月11日 08:28:59   作者:劉婉晴  
這篇文章主要介紹了Java中的排序Comparator類用法詳解,Comparator?類常作為?sorted()?方法的參數(shù)傳遞給?sorted?方法,用來解決給集合排序,自定義排序規(guī)則的問題,需要的朋友可以參考下

一、 做什么

Comparator 類常作為 sorted() 方法的參數(shù)傳遞給 sorted 方法,用來解決給集合排序,自定義排序規(guī)則的問題 。

那從這個角度看,這個類肯定很常用了,因為我知道大家都不喜歡自己寫排序方法,而且自己寫的肯定還有性能優(yōu)化問題,我們直接用 jdk 幫我們封裝好的,就即簡潔,又易于閱讀 。

ps: 本文中提供的代碼,為了提高可讀性都沒用 lamdam 和 函數(shù)式編程 簡化書寫,大家平時用的時候,自己使用 IDEA 快捷鍵轉化一下

二、使用

1. 對 Array 數(shù)組類型進行排序

下面是 Arrays 類暴露給我們的排序方法 —— sorted

Stream<T> sorted(Comparator<? super T> comparator);

Comparator 接口暴露給我們以下方法給我們實現(xiàn):

int compare(T o1, T o2);

(1)情況一 : 直接 new Comparator 對象,然后實現(xiàn)其 compare 方法進行排序

這種情況可以在 compare 內部定義好排序規(guī)則,看起來非常直觀,通過在 compare 中寫好邏輯代碼,可以實現(xiàn)多種排序規(guī)則 。

這種方式只能用于包裝類型的數(shù)組,如果數(shù)組是基本數(shù)據類型,必須轉成包裝類才能使用實現(xiàn) compare 方法進行定義排序

    public static void test(){
        // 對包裝類型的數(shù)組進行排序
        Integer[] a = {1, 2, 3, 0};
        // 直接對 a 排序
        Arrays.sort(a, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        // 不對 a 排序,而是將 a 排序的結果給 a2
        Integer[] a2 = Arrays.stream(a).sorted(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        }).toArray(new IntFunction<Integer[]>() {
            @Override
            public Integer[] apply(int value) {
                return new Integer[value];
            }
        });
        // 對基本數(shù)據類型的數(shù)組進行排序 —— 不允許自定義排序規(guī)則
        int[] b = {1, 3, 2, 4};
        Arrays.sort(b);
        int[] b1 = Arrays.stream(b).sorted().toArray();
    }

(2)情況二: 使用 Comparator 提供的靜態(tài)方法,鏈式的添加排序規(guī)則

這種方式也可以隨意定制排序規(guī)則,而且相對來說,代碼的可讀性更高,如下實例:

        Integer[] a1 = Arrays.stream(a).sorted(Comparator.comparing(new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer;
            }
        }).reversed()).toArray(new IntFunction<Integer[]>() {
            @Override
            public Integer[] apply(int value) {
                return new Integer[value];
            }
        });

其提供了如下方法,供我們使用 : 其中 then 那一堆可以幫我們定義二級排序規(guī)則,也就是說第一級相等的時候,按照那個屬性進行排序

請?zhí)砑訄D片描述

2. 對 Collection 集合類型進行排序

總體思想和上面的差不多

下面是一個例子 :

public void test2(){
    List<Student> list = new ArrayList<>();
    // 對 list 按照 先年齡 后 成績的方式排序
    Collections.sort(list, Comparator.comparing(Student :: getAge).thenComparing(Student :: getScore));
    // 將 list 按照先成績 再年齡 的方式排序,并將結果賦值給 list2
    List<Student> list2 = list.stream().sorted(Comparator.comparing(Student :: getScore).thenComparing(Student :: getAge)).collect(Collectors.toList());
}
class Student{
    int name;
    int age;
    int score;
    public int getName() {
        return name;
    }
    public void setName(int name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}

三、總結

直接創(chuàng)建 Comparator 類實例, 然后重寫 compare 方法定義排序規(guī)則使用 Comparator 靜態(tài)方法進行排序,直接用類名調用進行排序,給方法傳入相應的排序指標

到此這篇關于Java中的排序Comparator類用法詳解的文章就介紹到這了,更多相關Java的Comparator內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Security CsrfFilter過濾器用法實例

    Spring Security CsrfFilter過濾器用法實例

    這篇文章主要介紹了Spring Security CsrfFilter過濾器用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 使用IDEA深度調試MyBatis SQL執(zhí)行流程的實用指南

    使用IDEA深度調試MyBatis SQL執(zhí)行流程的實用指南

    在軟件開發(fā)的世界中,調試不僅是解決問題的工具,更是理解系統(tǒng)運行機制的窗口,對于像MyBatis這樣復雜的持久層框架,掌握高效的調試技巧能夠讓我們真正洞察SQL從方法調用到數(shù)據庫執(zhí)行的完整生命周期,所以本文給大家介紹了使用IDEA深度調試MyBatis SQL執(zhí)行流程的實用指南
    2025-10-10
  • Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn't?exist問題

    Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn'

    這篇文章主要介紹了Jeecg-Boot異常處理'jeecg-boot.QRTZ_LOCKS'?doesn't?exist問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot Redisson 集成的實現(xiàn)示例

    SpringBoot Redisson 集成的實現(xiàn)示例

    本文主要介紹了SpringBoot Redisson 集成的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • Spring MVC請求參數(shù)的深入解析

    Spring MVC請求參數(shù)的深入解析

    這篇文章主要給大家介紹了關于Spring MVC請求參數(shù)解析的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • SpringBoot集成antlr實現(xiàn)詞法和語法分析

    SpringBoot集成antlr實現(xiàn)詞法和語法分析

    Antlr4 是一款強大的語法生成器工具,可用于讀取、處理、執(zhí)行和翻譯結構化的文本或二進制文件,基本上是當前 Java 語言中使用最為廣泛的語法生成器工具,本文給大家介紹了SpringBoot集成antlr實現(xiàn)詞法和語法分析,需要的朋友可以參考下
    2024-06-06
  • Spring Boot實現(xiàn)圖片上傳/加水印一把梭操作實例代碼

    Spring Boot實現(xiàn)圖片上傳/加水印一把梭操作實例代碼

    這篇文章主要給大家介紹了關于Spring Boot實現(xiàn)圖片上傳/加水印一把梭操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Spring Security 中如何讓上級擁有下級的所有權限(案例分析)

    Spring Security 中如何讓上級擁有下級的所有權限(案例分析)

    這篇文章主要介紹了Spring Security 中如何讓上級擁有下級的所有權限,本文通過案例分析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實現(xiàn)統(tǒng)一支付入口集成六種支付方式

    Java實現(xiàn)統(tǒng)一支付入口集成六種支付方式

    本文介紹了Java實現(xiàn)統(tǒng)一支付入口集成六種支付方式,包括PC端、H5端、微信小程序端和自研會員卡支付的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11

最新評論

佛教| 淅川县| 灵石县| 类乌齐县| 西盟| 大余县| 蒲城县| 新宾| 通州区| 莱芜市| 崇文区| 民勤县| 莱州市| 麦盖提县| 茂名市| 嘉鱼县| 六盘水市| 桂东县| 青海省| 石林| 东海县| 颍上县| 阜阳市| 奉节县| 黄冈市| 阿瓦提县| 普洱| 门源| 晋江市| 舞阳县| 潜山县| 西藏| 曲水县| 铁力市| 星座| 闽清县| 浦江县| 大宁县| 吉首市| 长沙县| 许昌市|