TGViewer
Библиотека джависта | Java, Spring, Maven, Hibernate Библиотека джависта | Java, Spring, Maven, Hibernate @javaproglib · 22K subscribers
Post #7719 2.43K
👾 Collectors.toMap падает там, где HashMap.put молчит

Привычка к map.put() подводит при переходе на стримы:
Map<String, User> byEmail = users.stream()
.collect(Collectors.toMap(User::email, u -> u));


Здесь сразу две мины:

1. Дубликаты ключей → IllegalStateException. Map.put тихо перезаписал бы значение, а toMap без merge-функции бросает «Duplicate key». Фикс — третий аргумент:
.collect(Collectors.toMap(User::email, u -> u, (a, b) -> b)); // оставить последний


2. null в значении → NullPointerException. Под капотом toMap использует Map.merge, который по контракту не допускает null-значение. HashMap сам по себе null-значения разрешает, поэтому баг ловится не на ровной коллекции, а на «редких» данных в проде:
.collect(Collectors.toMap(User::email, User::nickname)); // nickname == null -> NPE


Если значение может быть null, собирай вручную в HashMap через forEach/reduce или фильтруй заранее. Стоит держать в голове: toMap строже, чем тот Map, который он создаёт.

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#CoreJava
  • ❤ 6
  • 👍 4
  • 🔥 1
More from @javaproglib
  1. Oct 12, 2026👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефо…
  2. Oct 10, 2026Post #7892
  3. Oct 10, 2026Read. Write. Edit. Bash. Это базовый набор операций Pi — агента, на котором построен OpenC…
  4. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  5. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  6. Sep 30, 2026🫡 Шпаргалка по аннотациям Spring Boot @Autowired, @RestController, @Transactional, @Cache…
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 →