/ / Прекъснато ли е докладването за грешка в Collectors.toMap ()? [дубликат] - java, java-stream

Съобщенията за грешки в Collectors.toMap () са нарушени ли? [дубликат] - java, java-stream

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]}