将<string>串流到Map <string,integer =“”>

时间:2015-04-29 10:19:09

标签: java java-8 java-stream collect collectors

我有Stream<String>个文件,现在我想将相等的单词组合成Map<String, Integer>,这个单词在Stream<String>中的频率是多少。

我知道我必须使用collect(Collectors.groupingBy(..)),但我不知道如何使用它。

如果有人可以提供一些如何解决这个问题的提示,那将是非常好的!

1 个答案:

答案 0 :(得分:1)

使用Map<String, Long>作为下游收集器创建Collectors.counting()非常容易:

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)));