【问题标题】:Stream<String> to Map<String, Integer>Stream<String> 到 Map<String, Integer>
【发布时间】:2015-07-08 13:38:22
【问题描述】:
我有一个文件的Stream<String>,现在我想将相同的单词组合成一个Map<String, Integer>,这很重要,这个单词在Stream<String> 中出现的频率。
我知道我必须使用collect(Collectors.groupingBy(..)),但我不知道如何使用它。
如果有人可以提供一些提示如何解决这个问题,那就太好了!
【问题讨论】:
标签:
java
java-8
java-stream
collect
collectors
【解决方案1】:
使用Collectors.counting() 作为下游收集器很容易创建Map<String, Long>:
Stream<String> s = Stream.of("aaa", "bb", "cc", "aaa", "dd");
Map<String, Long> map = s.collect(Collectors.groupingBy(
Function.identity(), Collectors.counting()));
如果你不喜欢Long类型,可以这样算到Integer:
Map<String, Integer> mapInt = s.collect(Collectors.groupingBy(
Function.identity(),
Collectors.reducing(0, str -> 1, Integer::sum)));