温馨提示×

温馨提示×

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

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

java Comparator 怎么链式调用

发布时间:2026-10-24 10:08:19 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java 里,Comparator 支持链式调用(chaining),主要是通过以下方法实现的(Java 8+):


一、核心链式方法

1️⃣ thenComparing(...)

当第一个比较条件相等时,使用下一个比较条件。

List<Person> list = ...;

list.sort(
    Comparator
        .comparing(Person::getAge)
        .thenComparing(Person::getName)
);

含义:

  • 先按 age 排序
  • age 相同,再按 name 排序

2️⃣ reversed()

反转排序顺序(可链式)

Comparator<Person> cmp =
    Comparator
        .comparing(Person::getAge)
        .reversed()
        .thenComparing(Person::getName);

⚠️ 注意:reversed() 只反转它前面的 comparator


3️⃣ thenComparingInt / thenComparingLong / thenComparingDouble

用于基本类型,避免装箱

list.sort(
    Comparator
        .comparing(Person::getName)
        .thenComparingInt(Person::getAge)
);

二、完整示例

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

    // getter...
}
List<Person> list = ...;

list.sort(
    Comparator
        .comparing(Person::getAge)          // 年龄升序
        .thenComparing(Person::getName)    // 年龄相同按名字
        .thenComparingDouble(Person::getSalary).reversed() // 薪资降序
);

三、null 安全链式排序

Comparator<Person> cmp =
    Comparator
        .nullsFirst(Comparator.comparing(Person::getName))
        .thenComparing(Person::getAge, Comparator.nullsLast(Integer::compareTo));

四、静态写法 vs 链式写法

// 链式(推荐)
Comparator.comparing(Person::getAge)
          .thenComparing(Person::getName);

// 匿名类(老写法)
new Comparator<Person>() {
    public int compare(Person a, Person b) {
        ...
    }
}

五、总结

✅ 链式调用关键点:

  • Comparator.comparing(...)
  • .thenComparing(...)
  • .reversed()
  • 支持 null 安全(nullsFirst / nullsLast)

如果你有具体排序场景(比如 Map、对象列表、多字段优先级),我可以帮你写完整代码。

向AI问一下细节

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

AI
助
手