首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我如何使用groupBy来统计出现的次数?

我如何使用groupBy来统计出现的次数?
EN

Stack Overflow用户
提问于 2014-08-22 14:46:21
回答 5查看 160.2K关注 0票数 214

我想将流中的项收集到一个映射中,该映射将相等的对象分组在一起,并映射到出现的次数。

代码语言:javascript
复制
List<String> list = Arrays.asList("Hello", "Hello", "World");
Map<String, Long> wordToFrequency = // what goes here?

因此,在本例中,我希望map由以下条目组成:

代码语言:javascript
复制
Hello -> 2
World -> 1

我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-22 14:55:51

我认为您只是在寻找overload,它需要另一个Collector来指定如何处理每个组……然后使用Collectors.counting()进行计数:

代码语言:javascript
复制
import java.util.*;
import java.util.stream.*;

class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("Hello");
        list.add("Hello");
        list.add("World");

        Map<String, Long> counted = list.stream()
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

        System.out.println(counted);
    }
}

结果:

代码语言:javascript
复制
{Hello=2, World=1}

(也有可能使用groupingByConcurrent来提高效率。对于您的真实代码,如果它在您的上下文中是安全的,请牢记这一点。)

票数 426
EN

Stack Overflow用户

发布于 2018-06-30 00:45:49

以下是对象列表示例

代码语言:javascript
复制
Map<String, Long> requirementCountMap = requirements.stream().collect(Collectors.groupingBy(Requirement::getRequirementType, Collectors.counting()));
票数 18
EN

Stack Overflow用户

发布于 2016-11-14 22:49:20

代码语言:javascript
复制
List<String> list = new ArrayList<>();

list.add("Hello");
list.add("Hello");
list.add("World");

Map<String, List<String>> collect = list.stream()
                                        .collect(Collectors.groupingBy(o -> o));
collect.entrySet()
       .forEach(e -> System.out.println(e.getKey() + " - " + e.getValue().size()));
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25441088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档