TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.25K subscribers
Post #2099 1.35K
Как сортировать в Java, если в данных бывают null?

Обычная сортировка по полю выглядит просто:
users.sort(Comparator.comparing(User::name));


Но если name() у какого-то пользователя вернёт null, сортировка может упасть с NullPointerException.

Например:
record User(String name) {}

var users = new ArrayList<>(List.of(
new User("Bob"),
new User(null),
new User("Ann")
));


Для таких случаев в Comparator есть специальные обёртки:
Comparator.nullsLast(String::compareTo)


Теперь null можно отправить в конец:
users.sort(Comparator.comparing(
User::name,
Comparator.nullsLast(String::compareTo)
));


Результат будет предсказуемым:
Ann
Bob
null


Если null нужно поставить в начало, есть nullsFirst:
users.sort(Comparator.comparing(
User::name,
Comparator.nullsFirst(String::compareTo)
));


То же самое удобно для дат, email, optional-полей из базы и данных из внешних API:
orders.sort(Comparator.comparing(
Order::paidAt,
Comparator.nullsLast(Comparator.naturalOrder())
));


Так сортировка явно показывает бизнес-правило: пустые значения не ломают код, а уходят туда, куда нужно.

Если поле для сортировки может быть null, лучше сразу описать это через nullsFirst/nullsLast, а не надеяться, что данные всегда идеальные.

👉 Java Ready | #совет
  • ❤ 7
  • 👍 2
  • 🔥 2
More from @java_ready
  1. Oct 6, 2026Безопасная настройка retry для всей системы! В статье Java-разработчик делится опытом внед…
  2. Oct 5, 2026Почему после Stream.toList() нельзя добавить элемент? При работе со Stream часто нужно соб…
  3. Oct 5, 2026Как оплачивать зарубежные сервисы в 2026 году? Можно бегать между посредниками и бояться б…
  4. Oct 5, 2026Находим три самых популярных товара! Есть поток покупок с повторяющимися названиями. Постр…
  5. Oct 2, 2026photo post
  6. Oct 1, 2026Следим за появлением файлов в папке через WatchService! Создадим наблюдатель и зарегистрир…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →