温馨提示×

温馨提示×

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

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

java Comparator 如何嵌套

发布时间:2026-10-03 20:18:06 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java 中,Comparator 的“嵌套”通常是指:
先按一个字段比较,如果相等,再按另一个字段比较,也就是
多级排序(链式比较)
。

下面从常见写法到进阶用法给你梳理一下。


一、最推荐:Comparator.thenComparing(Java 8+)

这是最清晰、最常用的方式。

示例:先按年龄,再按姓名

List<Person> list = ...;

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

list.sort(comparator);

✅ 支持无限嵌套:

Comparator.comparing(Person::getAge)
          .thenComparing(Person::getName)
          .thenComparing(Person::getId);

二、反向排序(嵌套 + 倒序)

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

或者:

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

⚠️ 注意:

  • reversed() 只作用于当前 comparator
  • 链式调用顺序很重要

三、使用 thenComparingInt / thenComparingLong

避免装箱,性能更好:

Comparator<Person> comparator =
        Comparator.comparingInt(Person::getAge)
                  .thenComparingLong(Person::getId);

四、手动嵌套(不推荐但要知道)

Comparator<Person> comparator = (a, b) -> {
    int cmp = Integer.compare(a.getAge(), b.getAge());
    if (cmp != 0) return cmp;
    return a.getName().compareTo(b.getName());
};

✅ 灵活
❌ 可读性差、易出错


五、嵌套对象字段排序

Comparator.comparing(p -> p.getAddress().getCity())
          .thenComparing(Person::getName);

六、动态嵌套(运行时决定排序字段)

List<Comparator<Person>> comparators = new ArrayList<>();
comparators.add(Comparator.comparing(Person::getAge));
comparators.add(Comparator.comparing(Person::getName));

Comparator<Person> finalComparator = comparators.stream()
        .reduce(Comparator::thenComparing)
        .orElse(null);

总结一句话

Comparator 嵌套 = comparing().thenComparing().thenComparing()

如果你有:

  • 具体业务场景
  • List / Map / Stream
  • 复杂对象结构

可以贴代码,我可以直接帮你写嵌套 Comparator。

向AI问一下细节

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

AI
助
手