Mediumcomparator
Чем Comparator.thenComparing полезен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
thenComparing — chain методов для составного (multi-level) компаратора: сортирует по первому ключу, при равенстве — по второму.
// По age, при равенстве — по name
Comparator<Person> cmp = Comparator
.comparingInt(Person::getAge)
.thenComparing(Person::getName);
list.sort(cmp);
// age по убыванию, name по возрастанию
Comparator.comparingInt(Person::getAge).reversed()
.thenComparing(Person::getName);
// С nullable полем
Comparator.comparing(Person::getMiddleName,
Comparator.nullsFirst(Comparator.naturalOrder()));- Вариации:
thenComparingInt/Long/Double— без boxing; comparing(keyExtractor, keyComparator)— кастомный comparator для ключа;nullsFirst/nullsLast— обработка null;- Универсальный инструмент, избегает custom
Comparable.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.