Выбор ответа Middle Лямбды и Stream API обновлено

toMap и дубли ключей

Вопрос

Что произойдёт при Stream.of("ab", "cd", "ef").collect(Collectors.toMap(String::length, s -> s))?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: IllegalStateException: Duplicate key 2. toMap с двумя аргументами бросает IllegalStateException при совпадении ключей.

Варианты ответа

  1. Получится {2=ef}: последнее значение перезапишет
  2. Получится {2=ab}: первое значение сохранится
  3. Получится {2=[ab, cd, ef]}
  4. IllegalStateException: Duplicate key 2правильный ответ

Разбор

toMap с двумя аргументами бросает IllegalStateException при совпадении ключей. Чтобы оставить первое или последнее, передают функцию слияния: toMap(k, v, (a, b) -> a). Список значений по ключу даёт groupingBy.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.