温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Comparator 怎么链式调用

发布时间:2026-07-18 13:16:31 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

Java 里,Comparator链式调用主要靠 Java 8 引入的方法,非常常见、也非常好用。


一、核心思路

Comparator 提供了两个关键方法用于链式调用:

thenComparing

前一个比较规则相等时,再按下一个规则比较

Comparator<T> thenComparing(Comparator<? super T> other)

二、最常见的链式写法

示例对象

class User {
    String name;
    int age;
    double salary;

    // getter / constructor
}

1️⃣ 先按年龄,再按薪资

Comparator<User> comparator =
        Comparator.comparing(User::getAge)
                  .thenComparing(User::getSalary);

✅ 含义:

  • 先按 age 升序
  • 如果 age 相同,再按 salary 升序

2️⃣ 多字段排序(3 个及以上)

Comparator<User> comparator =
        Comparator.comparing(User::getAge)
                  .thenComparing(User::getSalary)
                  .thenComparing(User::getName);

三、降序 + 链式调用

1️⃣ 单个字段降序

Comparator<User> comparator =
        Comparator.comparing(User::getAge, Comparator.reverseOrder());

2️⃣ 链式 + 部分降序

Comparator<User> comparator =
        Comparator.comparing(User::getAge)          // 升序
                  .thenComparing(User::getSalary, Comparator.reverseOrder()); // 降序

四、处理 null 值(非常实用)

1️⃣ null 排最后

Comparator<User> comparator =
        Comparator.comparing(
            User::getName,
            Comparator.nullsLast(String::compareTo)
        );

2️⃣ 链式 + null 处理

Comparator<User> comparator =
        Comparator.comparing(
            User::getName,
            Comparator.nullsLast(String::compareTo)
        ).thenComparing(
            User::getAge
        );

五、完整示例

List<User> users = new ArrayList<>();

users.sort(
    Comparator.comparing(User::getAge)
              .thenComparing(User::getSalary, Comparator.reverseOrder())
              .thenComparing(User::getName)
);

六、总结口诀 ✅

先 comparing,再 thenComparing,想降序就 reverseOrder,想防 null 就 nullsLast


如果你愿意,我也可以帮你:

  • Stream.sorted() 写链式排序
  • 对比 SQL ORDER BY 和 Comparator 的区别
  • Comparator vs Comparable 的使用场景
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI