2016-03-17 43 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

回答