2016-03-17 41 views
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 - 任何人看到我做錯了什麼?

+0

什麼是讀者? –

+2

'return splitted;(splitted [1],splitted [2]);'這是合法的嗎? –

+2

請參閱http://stackoverflow.com/help/mcve。在這裏你可以做的一件非常有用的事情就是找出'reader.lines()'中的內容,將其保存到文本文件或其他內容中,然後將其發佈到此處,以便我們真正知道您的數據是什麼。還請發佈* exception的整個堆棧跟蹤,而不僅僅是類名和消息。 – Radiodef

回答