java中匿名内部类实现comparator排序,核心是在调用sort方法时传入重写compare()的未命名comparator实例,支持单字段、对象属性、降序及多级排序,但java 8后推荐使用lambda或comparator.comparing链式调用。

Java 中匿名内部类实现 Comparator 排序,核心就是直接在调用排序方法(如 Collections.sort() 或 Arrays.sort())时,传入一个新创建的、未命名的 Comparator 实例,重写其 compare() 方法。
基本写法:按单个字段升序比较
比如对 List<string></string> 按字符串长度排序:
Collections.sort(list, new Comparator<string>() {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});</string>
注意使用 Integer.compare() 而不是直接相减(避免整型溢出),这是安全写法。
按对象属性排序(例如 Person 的 age)
假设有个 Person 类,含 name 和 age 字段:
Collections.sort(people, new Comparator<person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
});</person>
如果要降序,只需交换参数顺序或加负号:return Integer.compare(p2.getAge(), p1.getAge());
多级排序(先按 age,再按 name)
在 compare() 中先比第一优先级,相等时再比第二优先级:
- 先比较
age,不等就返回结果 - 相等则调用
String.compareTo()比较name
Collections.sort(people, new Comparator<person>() {
@Override
public int compare(Person p1, Person p2) {
int ageDiff = Integer.compare(p1.getAge(), p2.getAge());
if (ageDiff != 0) {
return ageDiff;
}
return p1.getName().compareTo(p2.getName());
}
});</person>
替代方案提醒:Lambda 更简洁(Java 8+)
匿名内部类虽兼容老版本,但 Java 8 后推荐用 Lambda 表达式,语义更清晰:
Collections.sort(people, (p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));
或者用 Comparator.comparing() 链式调用:
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
匿名内部类现在主要用于需要兼容 JDK 7 及以下,或逻辑复杂需多行处理的场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











