在 Java 里,Comparator 本身是一个函数式接口,常用于 sort()、Collections.sort()、Stream.sorted() 等场景。所谓“传参”,通常有以下几种常见方式,从最常用到进阶给你梳理一下。
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);
}
});
list.sort((o1, o2) -> o1.compareTo(o2));
或:
Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
list.sort(String::compareTo);
如果是自定义对象:
list.sort(Student::getName); // 按 getName() 排序
List<Student> students = ...;
students.sort(Comparator.comparing(Student::getAge));
students.sort(Comparator.comparing(Student::getAge).reversed());
students.sort(
Comparator
.comparing(Student::getAge)
.thenComparing(Student::getName)
);
你可以把 Comparator 当成普通参数传递:
public static <T> void sortList(List<T> list, Comparator<T> comparator) {
list.sort(comparator);
}
调用:
sortList(students, Comparator.comparing(Student::getAge));
比如按传入的字段排序:
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"));
students.sort(
Comparator.nullsLast(Comparator.comparing(Student::getAge))
);
✅ Comparator 的“传参”本质是:
sort() / sorted()Comparator<T>)Comparator.comparing如果你有具体场景(比如:Map 排序、对象嵌套、动态字段),可以直接贴代码,我可以帮你写具体实现。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。