在 Java 中,Comparator 提供了链式调用(chaining)的能力,常用于多字段排序。核心方法是:
thenComparing(...)thenComparingInt / thenComparingLong / thenComparingDoublereversed()nullsFirst / nullsLastclass User {
String name;
int age;
String city;
// constructor, getters
}
List<User> users = ...;
users.sort(
Comparator
.comparing(User::getAge)
.thenComparing(User::getName)
);
users.sort(
Comparator
.comparing(User::getAge).reversed()
.thenComparing(User::getName)
);
⚠️ 注意:reversed() 只作用于它前面的 comparator
等价写法(更清晰):
users.sort(
Comparator
.comparing(User::getAge, Comparator.reverseOrder())
.thenComparing(User::getName)
);
users.sort(
Comparator
.comparingInt(User::getAge)
.thenComparingDouble(User::getScore)
);
users.sort(
Comparator
.comparing(User::getName, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparingInt(User::getAge)
);
List<User> sorted = users.stream()
.sorted(
Comparator
.comparing(User::getCity)
.thenComparing(User::getAge)
)
.collect(Collectors.toList());
users.sort(
Comparator
.comparing(User::getCity)
.thenComparing(User::getAge, Comparator.reverseOrder())
.thenComparing(User::getName)
);
| 场景 | 方法 |
|---|---|
| 主排序 | comparing / comparingInt |
| 次级排序 | thenComparing |
| 降序 | .reversed() |
| null 安全 | nullsFirst / nullsLast |
| 性能优化 | comparingInt / comparingDouble |
如果你有具体排序规则或字段类型(比如 Map、嵌套对象、Kotlin),可以贴出来,我可以帮你写完整 comparator。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。