在 Java 里,Comparator 支持链式调用(chaining),主要是通过以下方法实现的(Java 8+):
thenComparing(...)当第一个比较条件相等时,使用下一个比较条件。
List<Person> list = ...;
list.sort(
Comparator
.comparing(Person::getAge)
.thenComparing(Person::getName)
);
含义:
age 排序age 相同,再按 name 排序reversed()反转排序顺序(可链式)
Comparator<Person> cmp =
Comparator
.comparing(Person::getAge)
.reversed()
.thenComparing(Person::getName);
⚠️ 注意:reversed() 只反转它前面的 comparator
thenComparingInt / thenComparingLong / thenComparingDouble用于基本类型,避免装箱
list.sort(
Comparator
.comparing(Person::getName)
.thenComparingInt(Person::getAge)
);
class Person {
String name;
int age;
double salary;
// getter...
}
List<Person> list = ...;
list.sort(
Comparator
.comparing(Person::getAge) // 年龄升序
.thenComparing(Person::getName) // 年龄相同按名字
.thenComparingDouble(Person::getSalary).reversed() // 薪资降序
);
Comparator<Person> cmp =
Comparator
.nullsFirst(Comparator.comparing(Person::getName))
.thenComparing(Person::getAge, Comparator.nullsLast(Integer::compareTo));
// 链式(推荐)
Comparator.comparing(Person::getAge)
.thenComparing(Person::getName);
// 匿名类(老写法)
new Comparator<Person>() {
public int compare(Person a, Person b) {
...
}
}
✅ 链式调用关键点:
Comparator.comparing(...).thenComparing(...).reversed()nullsFirst / nullsLast)如果你有具体排序场景(比如 Map、对象列表、多字段优先级),我可以帮你写完整代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。