温馨提示×

温馨提示×

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

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

java Comparator 如何链式调用

发布时间:2026-10-24 09:12:14 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 中,Comparator 提供了链式调用(chaining)的能力,常用于多字段排序。核心方法是:

  • thenComparing(...)
  • thenComparingInt / thenComparingLong / thenComparingDouble
  • reversed()
  • nullsFirst / nullsLast

一、基本链式排序(多字段排序)

示例实体类

class User {
    String name;
    int age;
    String city;

    // constructor, getters
}

按 age 升序,再按 name 升序

List<User> users = ...;

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

二、不同排序方向(升序 / 降序)

age 降序,name 升序

users.sort(
    Comparator
        .comparing(User::getAge).reversed()
        .thenComparing(User::getName)
);

⚠️ 注意:reversed() 只作用于它前面的 comparator

等价写法(更清晰):

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

三、基本类型优化(避免装箱)

按 age(int),再按 score(double)

users.sort(
    Comparator
        .comparingInt(User::getAge)
        .thenComparingDouble(User::getScore)
);

四、处理 null 值

name 为 null 时排到最后

users.sort(
    Comparator
        .comparing(User::getName, Comparator.nullsLast(Comparator.naturalOrder()))
        .thenComparingInt(User::getAge)
);

五、Stream 中使用

List<User> sorted = users.stream()
    .sorted(
        Comparator
            .comparing(User::getCity)
            .thenComparing(User::getAge)
    )
    .collect(Collectors.toList());

六、完整示例(多字段 + 排序方向)

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

七、总结

场景 方法
主排序 comparing / comparingInt
次级排序 thenComparing
降序 .reversed()
null 安全 nullsFirst / nullsLast
性能优化 comparingInt / comparingDouble

如果你有具体排序规则或字段类型(比如 Map、嵌套对象、Kotlin),可以贴出来,我可以帮你写完整 comparator。

向AI问一下细节

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

AI
助
手