使用Stream API计算每个元素的出现次数并创建HashMap

时间:2017-08-27 05:07:20

标签: java data-structures lambda java-8 java-stream

我有一个包含重复元素的数组,如

[ "10.0.0.1 - frank [10/Dec/2000:12:34:56 -0500] \"GET /a.gif HTTP/1.0\" 200 234", 
"10.0.0.1 - frank [10/Dec/2000:12:34:57 -0500] \"GET /b.gif HTTP/1.0\" 200 234", 
"10.0.0.2 - nancy [10/Dec/2000:12:34:58 -0500] \"GET /c.gif HTTP/1.0\" 200 234",
"10.0.0.2 - nancy [10/Dec/2000:12:34:58 -0500] \"GET /c.gif HTTP/1.0\" 200 234",
"10.0.0.3 - nancy [10/Dec/2000:12:34:58 -0500] \"GET /c.gif HTTP/1.0\" 200 234" ]

我想将这个数组转换为HashMap,所以我的HashMap看起来应该是这样的

"10.0.0.1" : 2 
"10.0.0.2" : 2 
"10.0.0.3" : 1

为了制作HashMap,我使用Stream API编写了这段代码。

final Map<String, Integer> ipMap = Arrays.stream(lines)
     .map(ip -> ip.substring(0, ip.indexOf(" ")))
     .collect(Collectors
           .toMap(x -> x, x -> 1));

在上面的代码中,我知道我在x -> 1内使用了.toMap。因为我不知道该写些什么。

这是我遇到的错误。

  

线程“main”中的异常java.lang.IllegalStateException:Duplicate   关键1

我正在寻找使用Stream API的答案。

0 个答案:

没有答案