Как избежать «IllegalStateException: Duplicate key» в Java 8, когда база данных возвращает повторяющиеся идентификаторы? - PullRequest
0 голосов
/ 07 ноября 2019

База данных возвращает CompanyEntity, который содержит дубликат employeeID

Map<String, CompanyEntity> pp = allEmployees.stream().collect(Collectors.toMap(CompanyEntity::getEmployeeId, Function.identity()));

Исключение, которое мы получаем:

IllegalStateException: Duplicate key

Есть ли настройка для предотвращения этого в Java 8 без замены ключа или я должениспользовать старый способ Java 6, где я проверяю содержит и обновляет карту?

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Подстройка может быть функцией слияния для переопределения существующего значения в случае дублирования ключей:

allEmployees.stream()
            .collect(Collectors.toMap(CompanyEntity::getEmployeeId, 
                 Function.identity(), (a,b) -> b))

Но было бы намного лучше определить существующую реализацию в кавычках , где я проверяюсодержит и обновляет карту . Если вы проверяете наличие и не обновляете (put), вместо этого следует использовать (a,b) -> a.

0 голосов
/ 07 ноября 2019

Вы можете использовать группировку по коллектору. Это даст вам уникальные значения employeeId и список случаев. На втором шаге в сборщике группировки вы можете получить первый элемент списка. См. Также Stream groupingBy: сокращение до первого элемента списка и https://www.baeldung.com/java-groupingby-collector

.
...