List<String> strings = Arrays.asList("3","55","3");
Map<String,Integer> map = strings
.stream()
.collect(Collectors.toMap(s ->s, s -> s.length()));
се завръща
java.lang.IllegalStateException: Duplicate key 1
където бих очаквал дублиращ ключ 3
Отговори:
2 за отговор № 1Това беше поправено в Java 9. Сега съобщението за грешка е правилно:
java.lang.IllegalStateException: Duplicate key 3 (attempted merging values 1 and 1)
1 за отговор № 2
Изглежда, че това е грешка в JDK 8, но вече не е така, както в JDK 9. Причината е, че не мога да го повторя в JDK 9 и причина втора тази връзка предоставени от @ Zircon произлизат от проблема и той е фиксиран към JDK 9.
Изглежда, че има няколко публикации по този въпрос, друга връзка е:
https://bugs.openjdk.java.net/browse/JDK-8040892
което само по себе си е дубликат на няколко други публикации.
0 за отговор № 3
Да, това е грешка, но има друг начин за преобразуване на това в карта, която е чрез използване на функция за идентичност:
List<String> strings = Arrays.asList("3","55","3");
Map<String, List<String>> map = strings.stream()
.collect(Collectors.toMap(Function.identity(), Arrays::asList));
Правейки това ще получите правилна грешка, която е
java.lang.IllegalStateException: Duplicate key [3]
За масив с уникални стойности
List<String> strings = Arrays.asList("3","55","4");
резултат ще бъде
{55=[55], 3=[3], 4=[4]}