温馨提示×

温馨提示×

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

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

java Comparator 怎样自定义

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

在 Java 中,Comparator 用于自定义对象的排序规则,不需要修改类本身(和 Comparable 不同)。下面按常见方式给你总结。


一、基本用法(实现 Comparator 接口)

import java.util.*;

class Student {
    String name;
    int age;

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

// 自定义比较器:按年龄升序
class AgeComparator implements Comparator<Student> {
    @Override
    public int compare(Student s1, Student s2) {
        return Integer.compare(s1.age, s2.age);
    }
}

public class Test {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("Tom", 20));
        list.add(new Student("Jack", 18));

        list.sort(new AgeComparator());
        // 或 Collections.sort(list, new AgeComparator());
    }
}

✅ compare 返回值规则:

  • < 0:o1 排在 o2 前面
  • = 0:相等
  • > 0:o1 排在 o2 后面

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

list.sort(new Comparator<Student>() {
    @Override
    public int compare(Student s1, Student s2) {
        return s1.name.compareTo(s2.name);
    }
});

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

// 按年龄升序
list.sort((s1, s2) -> Integer.compare(s1.age, s2.age));

// 按姓名排序
list.sort((s1, s2) -> s1.name.compareTo(s2.name));

四、使用 Comparator 静态方法(最优雅 ✅✅)

1️⃣ 单字段排序

list.sort(Comparator.comparing(Student::getAge));

2️⃣ 倒序

list.sort(Comparator.comparing(Student::getAge).reversed());

3️⃣ 多字段排序(先年龄,再姓名)

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

4️⃣ 处理 null 值

list.sort(Comparator.nullsLast(Comparator.comparing(Student::getAge)));

五、TreeSet / TreeMap 中使用 Comparator

TreeSet<Student> set = new TreeSet<>(
    Comparator.comparing(Student::getAge)
);

六、Comparator vs Comparable 区别

对比项 Comparator Comparable
位置 外部定义 类内部实现
灵活性 可多个规则 只能一种
使用场景 临时/多种排序 默认排序

如果你有具体排序场景(比如复杂对象、Map 排序、性能问题),可以直接贴代码,我帮你写最合适的 Comparator。

向AI问一下细节

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

AI
助
手