Фабрики Comparator и текучее задание порядка
Создавайте читаемые и компонуемые правила упорядочивания с помощью фабричных методов 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)
Как это работает
Фабрики Comparator декларативно выражают порядок и позволяют компоновать первичные и вторичные ключи без написанных вручную условных переходов.
Связанная документация
Доказательство