В работе с потоками в Java часто возникают ситуации, когда необходимо создать карту (Map) из списка объектов. Однако, в случае, если в исходном списке присутствуют дублирующиеся элементы, при попытке создания карты будет выброшено исключение java.lang.IllegalStateException: Duplicate key
.
Рассмотрим пример. Допустим, у нас есть список объектов класса Person
, каждый из которых имеет свойства name
и address
. Мы хотим создать карту, где ключом будет name
, а значением — address
.
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress));
В случае, если в списке people
окажутся два объекта с одинаковым именем, будет выброшено исключение.
Для обхода этой проблемы можно использовать метод toMap
с дополнительным аргументом. Третий аргумент представляет собой функцию, которая определяет, как будут обрабатываться дубликаты.
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress, (address1, address2) -> address1));
В данном случае, если встречаются два объекта с одинаковым именем, то будет сохранено значение address
первого из них. Это позволяет избежать выбрасывания исключения и успешно создать карту.
Таким образом, при работе с потоками в Java и создании карт из списков важно учитывать возможное наличие дубликатов и корректно их обрабатывать, чтобы избежать выбрасывания исключений и непредсказуемого поведения программы.
Добавить комментарий