在 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 < s2s1 > s2list.sort(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.name.compareTo(s2.name);
}
});
// 按年龄升序
list.sort((s1, s2) -> Integer.compare(s1.age, s2.age));
// 按姓名排序
list.sort((s1, s2) -> s1.name.compareTo(s2.name));
Comparator 的静态方法(最优雅 ✅✅)list.sort(Comparator.comparing(Student::getAge));
list.sort(Comparator.comparing(Student::getAge).reversed());
list.sort(Comparator
.comparing(Student::getAge)
.thenComparing(Student::getName));
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 优化),可以告诉我,我帮你写具体代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。