什么是 Comparator?
在 Java 中,Comparator 是一个函数式接口(位于 java.util 包),用于定义对象之间的比较逻辑。
它常用于对集合(如 List)进行自定义排序,尤其在无法修改类源码或需要多种排序方式时非常有用。
基本用法示例
以下是一个使用 Comparator 对字符串列表按长度排序的例子:
import java.util.*;
List<String> words = Arrays.asList("apple", "hi", "banana", "cat");
words.sort(Comparator.comparing(String::length));
// 结果: [hi, cat, apple, banana]
链式比较与多字段排序
可以使用 thenComparing() 实现多级排序:
// 假设有一个 Person 类,包含 name 和 age 字段
List<Person> people = ...;
people.sort(Comparator.comparing(Person::getAge)
.thenComparing(Person::getName));
反转排序
使用 reversed() 可轻松实现降序:
words.sort(Comparator.comparing(String::length).reversed());
注意事项
- 确保比较逻辑满足 自反性、对称性、传递性,否则可能导致排序异常。
- 避免在比较中使用浮点数直接相减(如
a - b),应使用Double.compare()等安全方法。 - Java 8 起,
Comparator支持 Lambda 表达式和方法引用,代码更简洁。