温馨提示×

温馨提示×

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

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

java Comparator 如何重写

发布时间:2026-10-03 19:04:03 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 中,Comparator 是一个函数式接口,用于自定义排序规则。常见的“重写”方式有以下几种。


一、实现 Comparator 接口(传统方式)

import java.util.*;

public class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}

使用:

List<Person> list = new ArrayList<>();
list.sort(new AgeComparator());

二、使用匿名内部类(老写法)

list.sort(new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.getAge(), p2.getAge());
    }
});

三、使用 Lambda 表达式(推荐 ✅)

list.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));

或:

list.sort(Comparator.comparingInt(Person::getAge));

四、多条件排序

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

五、倒序排序

list.sort(Comparator.comparingInt(Person::getAge).reversed());

六、compare 方法返回值规则(重点)

int compare(T o1, T o2)
  • 负数:o1 < o2
  • 0:o1 == o2
  • 正数:o1 > o2

⚠️ 不要直接写 return o1 - o2;(可能溢出)

✅ 推荐:

Integer.compare(o1, o2);

七、完整示例

class Person {
    int age;
    String name;

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

    public int getAge() { return age; }
    public String getName() { return name; }
}

public class Test {
    public static void main(String[] args) {
        List<Person> list = Arrays.asList(
            new Person(20, "Tom"),
            new Person(18, "Alice"),
            new Person(20, "Bob")
        );

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

        list.forEach(p -> System.out.println(p.getAge() + " " + p.getName()));
    }
}

如果你有 具体对象 / 排序规则 / JDK 版本,可以贴出来,我可以帮你写最合适的 Comparator。

向AI问一下细节

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

AI
助
手