使用 Comparator 工厂方法构建可读、可组合的排序规则。
代码对比
✕ Anonymous comparator
people.sort(new Comparator<Person>() {
@Override
public int compare(Person a, Person b) {
int byName = a.name().compareTo(b.name());
return byName != 0 ? byName : Integer.compare(a.age(), b.age());
}
});
✓ Java 8+
people.sort(Comparator.comparing(Person::name)
.thenComparingInt(Person::age));
发现此代码有问题? 告诉我们。
为什么现代方式更好
可组合
排序规则可以自然地链式组合。
更易审查
排序键及其优先级一目了然。
比较更安全
专用辅助方法可避免容易出错的算术比较器。
旧方式
匿名 Comparator
现代方式
Comparator 工厂
自 JDK
8
难度
入门
JDK 支持
Comparator 工厂与流畅排序
可用
自 JDK 8 起可用(2014 年 3 月)
工作原理
Comparator 工厂以声明式方式表达排序,无需手写分支即可组合主排序键和次排序键。
相关文档
证明