在 Java 中,Comparator 是用来定义对象排序规则的接口,常用于 Collections.sort()、List.sort()、Stream.sorted() 等场景。
下面从 基本用法 → 常见写法 → 进阶技巧 逐步说明。
java.util.Comparator<T> 是一个比较器接口,核心方法是:
int compare(T o1, T o2);
返回值含义:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
import java.util.Comparator;
Comparator<Person> byAge = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.age, p2.age);
}
};
使用:
List<Person> list = ...;
list.sort(byAge);
Comparator<Person> byAge = (p1, p2) -> Integer.compare(p1.age, p2.age);
Comparator.comparing✅ 最推荐
Comparator<Person> byAge = Comparator.comparing(p -> p.age);
或:
Comparator<Person> byAge = Comparator.comparing(Person::getAge);
// 升序
Comparator.comparing(Person::getAge);
// 降序
Comparator.comparing(Person::getAge).reversed();
Comparator<Person> comparator =
Comparator.comparing(Person::getAge)
.thenComparing(Person::getName);
Comparator.comparing(
Person::getName,
Comparator.nullsFirst(Comparator.naturalOrder())
);
nullsFirst:null 排前面nullsLast:null 排后面Comparator<String> byLength =
Comparator.comparing(String::length);
list.sort(comparator);
list.stream()
.sorted(comparator)
.collect(Collectors.toList());
Set<Person> set = new TreeSet<>(byAge);
List<Person> people = List.of(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30)
);
people.sort(
Comparator.comparing(Person::getAge)
.thenComparing(Person::getName)
);
✅ 写 Comparator 的最佳方式:
Comparator.comparing(类::属性)
.thenComparing(类::属性)
.reversed();
如果你有具体对象 / 排序规则(比如 Map、自定义类、复杂条件),可以直接贴代码,我可以帮你写。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。