В Java часто нужно превратить список объектов в Map.
Например, есть пользователи, и хочется получить словарь id -> name:
Map<Long, String> usersById = users.stream()
.collect(Collectors.toMap(User::id, User::name));
Код выглядит нормально, пока в списке нет двух пользователей с одинаковым id.
Если дубликат появится, Java выбросит:
IllegalStateException: Duplicate key
Поэтому, если дубликаты возможны, лучше сразу указать merge-функцию:
Map<Long, String> usersById = users.stream()
.collect(Collectors.toMap(
User::id,
User::name,
(oldName, newName) -> newName
));
Здесь при совпадении ключей останется новое значение.
Можно сделать наоборот:
(oldName, newName) -> oldName
Тогда сохранится первое значение.
👉 Java Ready | #совет
