验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Comparator 怎么链式调用

阅读:526 来源:乙速云 作者:代码code

Comparator 怎么链式调用

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


一、核心思路

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

thenComparing

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

Comparator thenComparing(Comparatorsuper T> other)

二、最常见的链式写法

示例对象

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

    // getter / constructor
}

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

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

✅ 含义:

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

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

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

三、降序 + 链式调用

1️⃣ 单个字段降序

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

2️⃣ 链式 + 部分降序

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

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

1️⃣ null 排最后

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

2️⃣ 链式 + null 处理

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

五、完整示例

List 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 的使用场景
分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>