2
我一直在打這個錯誤,但我無法理解它,因爲它抱怨只出現一次。Collectors.toMap IllegalStateException:在沒有重複時可能出現重複鍵
Exception in thread "main" java.lang.IllegalStateException: Duplicate key wp-admin/admin-ajax.php#13236
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at <my code>
這是原來的代碼:
reader.lines().filter(line -> line.startsWith(TAG_MAPPED_NODE)).map(line -> {
final String[] splitted = line.split(" ");
if (splitted.length != 3)
throw new IllegalStateException("Unexpected line: " + line);
return splitted;(splitted[1],splitted[2]);
}).collect(Collectors.toMap(t -> t[1], t -> t[2]));
然而,抱怨的價值究竟存在一次。輸入驗證碼:
List<String> usefulLines =
reader.lines().filter(line -> line.startsWith(TAG_MAPPED_NODE)).collect(Collectors.toList());
List<String> trouble =
usefulLines.stream().filter(line -> line.contains("wp-admin/admin-ajax.php#13236")).collect(Collectors.toList());
System.out.println("Trouble size: " + trouble.size());
return usefulLines.stream().map(line -> {
final String[] splitted = line.split(" ");
if (splitted.length != 3)
throw new IllegalStateException("Unexpected line: " + line);
return splitted;
}).collect(Collectors.toMap(t -> t[1], t -> t[2]));
,輸出爲:Trouble size: 1
因此,有是有這個值只有一個入口(而且,我必須補充,我將其存儲在地圖的價值側,不密鑰)
系統配置:
- Java版本:OpenJDK的版本 「1.8.0_72」
- IDE:IntelliJ IDEA的2016.1
- OS版:Fedora 22的64位
所以在世界上爲什麼我得到那個異常?這看起來像一個JDK的bug - 任何人看到我做錯了什麼?
什麼是讀者? –
'return splitted;(splitted [1],splitted [2]);'這是合法的嗎? –
請參閱http://stackoverflow.com/help/mcve。在這裏你可以做的一件非常有用的事情就是找出'reader.lines()'中的內容,將其保存到文本文件或其他內容中,然後將其發佈到此處,以便我們真正知道您的數據是什麼。還請發佈* exception的整個堆棧跟蹤,而不僅僅是類名和消息。 – Radiodef