温馨提示×

温馨提示×

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

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

java Comparator 怎么链式

发布时间:2026-09-13 05:03:41 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 里,Comparator 的“链式”通常指通过 thenComparing 实现多级排序,或者通过 Comparator.comparing(...).thenComparing(...) 连续拼接条件。

下面按常见用法说明。


1️⃣ 基础链式(多字段排序)

List<Person> list = ...;

list.sort(
    Comparator
        .comparing(Person::getAge)          // 第一排序:年龄
        .thenComparing(Person::getName)    // 第二排序:姓名
);

等价于:

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

2️⃣ 指定排序方向(升序 / 降序)

list.sort(
    Comparator
        .comparing(Person::getAge).reversed()   // 年龄降序
        .thenComparing(Person::getName)         // 姓名升序
);

⚠️ 注意:reversed() 只作用于当前 comparing


3️⃣ 多个 reversed

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

4️⃣ 使用 thenComparing 的不同形式

方法引用

.thenComparing(Person::getScore)

lambda

.thenComparing(p -> p.getScore())

自定义 Comparator

.thenComparing((a, b) -> Integer.compare(a.getScore(), b.getScore()))

5️⃣ null 值处理(很重要)

null 排最后

Comparator.comparing(
    Person::getName,
    Comparator.nullsLast(Comparator.naturalOrder())
)

链式示例

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

6️⃣ 静态变量复用 Comparator(推荐)

public static final Comparator<Person> BY_AGE_NAME =
    Comparator
        .comparing(Person::getAge)
        .thenComparing(Person::getName);

list.sort(BY_AGE_NAME);

7️⃣ Stream 中使用

list.stream()
    .sorted(
        Comparator
            .comparing(Person::getAge)
            .thenComparing(Person::getName)
    )
    .collect(Collectors.toList());

✅ 总结

需求 写法
多级排序 comparing().thenComparing()
降序 .reversed()
null 安全 nullsFirst / nullsLast
复用 定义静态 Comparator

如果你有具体对象结构或排序规则,我可以直接帮你写完整 Comparator。

向AI问一下细节

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

AI
助
手