在 Java 中,Comparator 是一个函数式接口(Functional Interface),位于 java.util 包下,用于定义对象之间的排序规则(比较规则)。
Comparator 是一个比较器,用来告诉 Java:“两个对象谁大谁小,怎么排?”
与 Comparable 不同:
Comparable:对象自己定义排序规则(类内部实现)Comparator:外部定义排序规则(不修改原类)@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
compare 方法规则:o1 < o2o1 == o2o1 > o2class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Comparator<Person> byAge = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.age - p2.age;
}
};
List<Person> list = new ArrayList<>();
list.sort(byAge);
list.sort((p1, p2) -> p1.age - p2.age);
Comparator.comparinglist.sort(Comparator.comparing(p -> p.age));
或:
list.sort(Comparator.comparing(Person::getAge));
| 方法 | 说明 |
|---|---|
comparing() |
按某字段排序 |
thenComparing() |
多级排序 |
reversed() |
倒序 |
nullsFirst() |
null 排前面 |
nullsLast() |
null 排后面 |
list.sort(
Comparator.comparing(Person::getAge)
.thenComparing(Person::getName)
);
list.sort(Comparator.comparing(Person::getAge).reversed());
| 对比点 | Comparator | Comparable |
|---|---|---|
| 所在位置 | 外部类 | 类内部 |
| 方法 | compare() |
compareTo() |
| 是否修改原类 | ❌ 不需要 | ✅ 需要 |
| 灵活性 | ✅ 高 | ❌ 低 |
Collections.sort(list, comparator)list.sort(comparator)TreeSet / TreeMap 构造函数stream.sorted(comparator)如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。