当前位置: 首页 > 知识库问答 >
问题:

计算Stream的元素

汪晨
2023-03-14

我想数一数一条流的不同元素,我想知道为什么

Stream<String> stream = Stream.of("a", "b", "a", "c", "c", "a", "a", "d");
Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, 1, Integer::sum));

不行,日蚀告诉我

类型收集器中的方法toMap(Function,Function,BinaryOperator)不适用于参数((s)-

顺便说一句,我知道这个解决方案:

Map<String, Long> counter2 = stream.collect(Collectors.groupingBy(s -> s, Collectors.counting()));

所以我有两个问题:

  1. 我的第一个方法有什么错误

编辑:我自己解决了第一个问题:

Map<String, Integer> counter1 = stream.collect(Collectors.toMap(s -> s, s -> 1, Integer::sum)); 

Java需要一个函数作为第二个参数。

共有3个答案

司徒胤
2023-03-14

如果您不使用并行流,以下方法应该有效:

final int[] counter = {0};
stream.peek(s -> counter[0]++);
楚健
2023-03-14
    private Collector<CustomObject.class, int[], Integer> customIntegerCountingCollector() {
    return Collector.of(
        () -> new int[1],
        (result, ) -> result[0] += 1,
        (result1, result2) -> {
            result1[0] += result2[0];
            return result1;
        },
        total -> Integer.valueOf(total[0])
    );
}

灵感来自:https://www.deadcoderising.com/2017-03-07-java-8-creating-a-custom-collector-for-your-stream/

澹台岳
2023-03-14

确实有几种方法可以做到这一点。你没有提到的是。收集(分组依据(x)-

在表现上有一些差异。

如果每个桶中几乎没有对象,那么方法#1将处于最佳状态。在每个bucket只有一个对象的理想情况下,您可以立即得到最终贴图,而无需修改条目。在有大量重复对象的最坏情况下,它必须执行大量装箱/拆箱操作。

方法#2依赖于counting()collector,它没有具体说明应该如何进行计数。当前的实现是减少,但这可能会改变。

summingit方法将在int而不是Integer中累积计数,因此不需要任何装箱/拆箱。如果物体重复很多次,它将处于最佳状态。

至于选择哪一个,最好是为了清晰而编写代码,并在必要时进行优化。对我来说,groupingBy(x-

 类似资料:
  • 问题内容: 我正在通过XML数据生成pdf文件。 我将段落元素的高度计算为: 但是这种方法不能正常工作。 你能给我个主意吗? 问题答案: 您的问题很奇怪。根据您的问题的标题,您想知道字符串的高度,但是您的代码显示您要求的是字符串的宽度。 请看一下FoobarFilmFestival示例。 如果是实例,则可以使用: 当我们使用12号字体时,这将返回基线以上的高度和基线以下的高度。您可能知道,字体大小

  • 问题内容: 是否有直接函数来计算CosmosDb查询中的不同元素? 这是默认计数: 和无数的独特作品: 但这会返回错误的请求-语法错误: 会和他们一起工作吗? 问题答案: 这是另一个解决地区问题并适用于的查询。基本上,您需要封装不重复内容然后进行计数。我们已经通过分页对它进行了测试,以查找您想要唯一记录的情况,而不仅是计数,而且它正在起作用。 您还可以根据条件所基于的内容,在括号的内部和外部使用子

  • 我正在寻找一种方法来计算步数: 我想我的问题有两方面: 我不明白C#和中的特殊 运算符 我不知道在哪里将某种变量输入到方法中。 一直在尝试通过微软的指南阅读 运算符的信息,但我仍然难以理解 内部发生了什么。 我的代码当前如下所示。这能正确吗? 很抱歉让人困惑。我将尝试缩小范围:如何将计数器放入? 我的任务的主要范围是对提供的fhcimolin方法进行全面测试,并将该方法与进行比较。一个小的附带任务

  • 本文向大家介绍javascript获取元素的计算样式,包括了javascript获取元素的计算样式的使用技巧和注意事项,需要的朋友参考一下 背景 使用css控制页面有4种方式,分别为行内样式(内联样式)、内嵌式、链接式、导入式。 行内样式(内联样式)即写在html标签中的style属性中,如 <div style="width:100px;height:100px;"></div> 内嵌样式即写在

  • 我目前正在处理一个关于如何在元素旋转之前找到初始点的问题。 在我的项目中,我有两个div,它们不能在同一个容器中,这导致了我遇到的问题。 我试图计算一个已经旋转的元素的初始点,这样我就可以正确地将另一个元素放置在它上面,然后应用相同的旋转度。为了确保使用正确的坐标,我有一个div,它在每次旋转时都会标记一个小正方形。蓝色方块表示初始点,红色方块表示元素旋转的中心点。我以为Javascript中有公

  • 本文向大家介绍计算C ++中的元音排列,包括了计算C ++中的元音排列的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数字n,我们必须计算使用这些规则可以形成多少个长度为n的字符串-每个字符都是小写的元音每个元音'a'只能跟一个'e'。每个元音“ e”只能跟一个“ a”或“ i”。每个元音“ i”都不能跟在另一个“ i”之后。每个元音“ o”只能跟一个“ i”或“ u”。每个元音“ u”只