Mediumcomparator

Что такое Comparator.nullsFirst/nullsLast?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Comparator.nullsFirst(cmp) — обёртка: null элементы идут в начале (меньше всех non-null). nullsLast — null в конце. Без них — NPE при сравнении с null.

Comparator<String> cmp =
    Comparator.nullsFirst(Comparator.naturalOrder());
List<String> list = Arrays.asList("b", null, "a");
list.sort(cmp);   // [null, "a", "b"]

// Nullable поле в компараторе
Comparator.comparing(
    Person::getMiddleName,
    Comparator.nullsFirst(Comparator.naturalOrder())
);
  • Если оба null — равны;
  • Если один null — nullsFirst: null < non-null, nullsLast: null > non-null;
  • В БД-стиле: nulls first / nulls last в ORDER BY;
  • Использовать всегда, когда поле может быть null и важно поведение при сортировке.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.