温馨提示×

温馨提示×

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

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

java Comparator 怎么自定义

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

在 Java 中,Comparator 是用来自定义对象排序规则的接口。常见有以下几种自定义方式。


一、实现 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("Alice", 20));
        list.add(new Student("Bob", 18));

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

✅ 返回值规则:

  • 负数:s1 < s2
  • 0:相等
  • 正数:s1 > s2

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

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
        .comparing(Student::getName, 
                   Comparator.nullsLast(String::compareTo)));

五、与 Comparable 的区别

对比项 Comparable Comparator
位置 写在类内部 类外部
方法 compareTo compare
用途 自然排序 自定义多种排序

六、完整示例(推荐写法)

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

如果你有 具体排序场景(比如 Map 排序、对象嵌套、Performance 优化),可以告诉我,我帮你写具体代码。

向AI问一下细节

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

AI
助
手