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

    关注我们

怎么用 Comparator 排序

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

怎么用 Comparator 排序

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

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


一、基本用法(最常用)

示例:按数字升序排序

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

list.sort(new Comparator() {
    @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 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 之前还是之后?
  • ✅ 是 字符串、数字还是自定义对象?

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

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