温馨提示×

温馨提示×

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

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

怎么用 Comparator 排序

发布时间:2026-07-18 14:28:35 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 里用 Comparator 排序,核心思路是:
定义一个“比较规则”,然后把这个规则传给排序方法

下面从常见用法一步步讲。


一、基本用法(最常用)

示例:按数字升序排序

List<Integer> list = Arrays.asList(3, 1, 4, 2);

list.sort(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2; // 升序
    }
});

System.out.println(list); // [1, 2, 3, 4]

compare 返回值含义

返回值 含义
< 0 o1 排在 o2 前面
= 0 o1 和 o2 相等
> 0 o1 排在 o2 后面

二、Lambda 简化写法(推荐)

list.sort((o1, o2) -> o1 - o2);

或者:

list.sort(Comparator.comparingInt(o -> o));

三、倒序(降序)排序

list.sort((o1, o2) -> o2 - o1);

或用 Comparator

list.sort(Comparator.reverseOrder());

四、对对象排序(重点)

示例对象

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

按 age 升序

List<Person> people = new ArrayList<>();
people.add(new Person("Tom", 20));
people.add(new Person("Jack", 18));

people.sort(Comparator.comparingInt(p -> p.age));

五、多条件排序(非常常用)

先按 age,再按 name

people.sort(
    Comparator.comparingInt((Person p) -> p.age)
              .thenComparing(p -> p.name)
);

六、倒序 + 多条件

people.sort(
    Comparator.comparingInt((Person p) -> p.age)
              .reversed()
              .thenComparing(p -> p.name)
);

七、与 Collections.sort() 一起用

Collections.sort(list, Comparator.comparingInt(o -> o));

八、注意事项(很重要)

❌ 不推荐用减法比较

return o1 - o2; // 可能溢出

✅ 推荐:

return Integer.compare(o1, o2);

九、常见记忆口诀 ✅

  • Comparator = 怎么比
  • compare(a, b)
    • a < b → 负数
    • a > b → 正数

如果你愿意,可以告诉我:

  • ✅ 你想排的是 List / 数组 / Map 的 value?
  • ✅ 是 Java 8 之前还是之后?
  • ✅ 是 字符串、数字还是自定义对象?

我可以直接给你“最合适的写法”。

向AI问一下细节

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

AI