<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JAVA 排序用法

      背景和價值

      Java 中的比較器(Comparator)是函數(shù)式編程中非常重要的一部分,它主要用于自定義排序規(guī)則。在 Java 8 之后,結(jié)合 Lambda 表達式和 Stream API,它的用法變得更加簡潔和強大。

      Java 提供了兩種主要的比較機制:

      1. Comparable 接口: 用于對象自身的默認排序(自然排序)。
      2. Comparator 接口: 用于定義外部的自定義排序規(guī)則。

      一、 Comparator 的基本用法

      Comparator<T> 是一個函數(shù)式接口,只有一個抽象方法:

      public interface Comparator<T> {
          int compare(T o1, T o2); // 核心方法
          // ... default 和 static 方法
      }
      
      • 如果 compare(o1, o2) 返回 負數(shù),表示 o1 排在 o2 前面
      • 如果 compare(o1, o2) 返回 ,表示 o1o2 相等
      • 如果 compare(o1, o2) 返回 正數(shù),表示 o1 排在 o2 后面

      二、 Java 8 之前(匿名內(nèi)部類)

      在 Java 8 之前,你需要使用匿名內(nèi)部類來實現(xiàn) Comparator

      List<Student> students = new ArrayList<>();
      // ... 填充數(shù)據(jù)
      
      // 按分數(shù)升序排序
      Collections.sort(students, new Comparator<Student>() {
          @Override
          public int compare(Student s1, Student s2) {
              return s1.getScore() - s2.getScore();
              // 或使用包裝類的方法:Integer.compare(s1.getScore(), s2.getScore());
          }
      });
      

      三、 Java 8 之后(Lambda 表達式和方法引用)

      Java 8 極大地簡化了 Comparator 的使用。

      1. 使用 Lambda 表達式

      由于 Comparator 是一個函數(shù)式接口,可以直接用 Lambda 表達式實現(xiàn) compare 方法:

      // 按分數(shù)升序排序
      Collections.sort(students, (s1, s2) -> s1.getScore() - s2.getScore());
      
      // 在 Stream 中使用 (分數(shù)降序排序)
      students.stream()
              .sorted((s1, s2) -> s2.getScore() - s1.getScore()) // s2 減 s1 實現(xiàn)降序
              .forEach(System.out::println);
      

      2. 使用靜態(tài)工廠方法 Comparator.comparing()(推薦)

      這是最推薦的方式,它允許你使用方法引用來指定排序的鍵(key):

      • 按分數(shù)升序:
        students.stream()
                .sorted(Comparator.comparing(Student::getScore)) // 默認升序
                .forEach(System.out::println);
        
      • 按分數(shù)降序:
        students.stream()
                .sorted(Comparator.comparing(Student::getScore).reversed()) // .reversed() 翻轉(zhuǎn)順序
                .forEach(System.out::println);
        
      • 按字符串(例如:姓名)升序:
        students.stream()
                .sorted(Comparator.comparing(Student::getName))
                .forEach(System.out::println);
        

      3. 鏈式比較(多條件排序)

      你可以使用 thenComparing() 來指定第二個、第三個等排序規(guī)則,這在第一個字段相同時非常有用。

      示例:先按專業(yè)升序,如果專業(yè)相同,則按分數(shù)降序。

      students.stream()
              .sorted(
                  Comparator.comparing(Student::getMajor) // 1. 主要排序:按專業(yè)升序
                            .thenComparing(Comparator.comparing(Student::getScore).reversed()) // 2. 次要排序:按分數(shù)降序
              )
              .forEach(System.out::println);
      

      4. 處理 null

      如果排序字段可能為 null,可以使用 nullsFirst()nullsLast() 來指定 null 值的排序位置。

      示例:按姓名排序,null 姓名排在最后。

      students.stream()
              .sorted(
                  Comparator.comparing(Student::getName, Comparator.nullsLast(String::compareTo))
              )
              .forEach(System.out::println);
      

      總結(jié)要點

      用法 描述 示例
      基礎(chǔ)升序 使用 comparing() 傳入 Getter 方法引用。 Comparator.comparing(Student::getScore)
      基礎(chǔ)降序 在基礎(chǔ)升序后調(diào)用 reversed() Comparator.comparing(Student::getScore).reversed()
      多條件排序 使用 thenComparing() 鏈接多個比較器。 comparing(...).thenComparing(...)
      原始類型 comparingInt(), comparingLong(), comparingDouble() 效率更高。 Comparator.comparingInt(Student::getScore)
      處理 Null 使用 nullsFirst()nullsLast() 包裹。 Comparator.nullsFirst(Comparator.comparing(Student::getName))

      參考資料

      posted @ 2025-10-23 20:46  向著朝陽  閱讀(4)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久国产成人午夜av影院| 亚洲欧洲一区二区免费| 熟女人妻精品一区二区视频| 免费人成视频在线| 尉氏县| 国产美女被遭强高潮免费一视频| 亚洲爆乳WWW无码专区| 性色av免费观看| 亚洲天堂av免费在线看| 四虎在线中文字幕一区| 免费国产女王调教在线视频| 人妻无码∧V一区二区| 亚洲人午夜射精精品日韩| 人人澡人人妻人人爽人人蜜桃| 国内揄拍国内精品少妇国语| 亚洲夂夂婷婷色拍ww47| 国精无码欧精品亚洲一区| 久久精品人人看人人爽| 精品少妇av蜜臀av| 嘉荫县| 欧美嫩交一区二区三区| 丁香婷婷色综合激情五月| 图们市| 国产人妻人伦精品婷婷| 亚洲色大成网站www久久九九| 永久黄网站色视频免费直播| 久久精品国产91精品亚洲| 精品国产中文字幕懂色| 午夜爽爽爽男女免费观看影院 | av天堂久久天堂av| 国产香蕉九九久久精品免费| 狠狠色丁香婷婷综合尤物| 亚洲精品无码日韩国产不卡av| 日韩高清国产中文字幕| 亚洲第一极品精品无码久久| 久久a级片| 欧美三级不卡在线观线看高清 | 国产女同一区二区在线| 少妇特黄a一区二区三区| 亚洲精品一二三区在线看| 人妻少妇偷人无码视频|