温馨提示×

温馨提示×

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

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

java Comparator 怎么传参

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

在 Java 里,Comparator 本身是一个函数式接口,常用于 sort()、Collections.sort()、Stream.sorted() 等场景。所谓“传参”,通常有以下几种常见方式,从最常用到进阶给你梳理一下。


一、最常用:匿名类 / Lambda(直接传 Comparator)

1️⃣ 匿名内部类

List<String> list = Arrays.asList("b", "a", "c");

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});

2️⃣ Lambda 表达式(推荐)

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

或:

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

二、方法引用(更简洁)

list.sort(String::compareTo);

如果是自定义对象:

list.sort(Student::getName); // 按 getName() 排序

三、使用 Comparator 静态方法(非常常用)

1️⃣ 按某个字段排序

List<Student> students = ...;

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

2️⃣ 倒序

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

3️⃣ 多字段排序

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

四、把 Comparator 当“参数”传给方法(自定义方法)

你可以把 Comparator 当成普通参数传递:

public static <T> void sortList(List<T> list, Comparator<T> comparator) {
    list.sort(comparator);
}

调用:

sortList(students, Comparator.comparing(Student::getAge));

五、带“外部参数”的 Comparator(动态排序)

比如按传入的字段排序:

public Comparator<Student> getComparator(String field) {
    if ("age".equals(field)) {
        return Comparator.comparing(Student::getAge);
    } else {
        return Comparator.comparing(Student::getName);
    }
}

调用:

students.sort(getComparator("age"));

六、null 安全排序(很实用)

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

总结一句话

✅ Comparator 的“传参”本质是:

  • 传给 sort() / sorted()
  • 或作为方法参数(Comparator<T>)
  • 用 Lambda / 方法引用 / Comparator.comparing

如果你有具体场景(比如:Map 排序、对象嵌套、动态字段),可以直接贴代码,我可以帮你写具体实现。

向AI问一下细节

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

AI
助
手