Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
23 Апр 2024
2 мин
48

Обработка дубликатов при создании карты с использованием потоков в Java

В работе с потоками в Java часто возникают ситуации, когда необходимо создать карту (Map) из списка объектов. Однако, в случае, если в исходном списке присутствуют

В работе с потоками в 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 и создании карт из списков важно учитывать возможное наличие дубликатов и корректно их обрабатывать, чтобы избежать выбрасывания исключений и непредсказуемого поведения программы.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий