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

收集器。summingInt()与mapToInt()。总和()

杨昊
2023-03-14

如果要对流中的整数值求和,主要有两种方法:

ToIntFunction<...> mapFunc = ...
int sum = stream().collect(Collectors.summingInt(mapFunc))

int sum = stream().mapToInt(mapFunc).sum()

第一个涉及装箱返回的整数

哪个更有效/更清晰?

共有1个答案

魏鸿
2023-03-14

您看到的是两个不同用例的交叉点。使用mapToInt(…)可以在终端操作之前链接其他IntStream操作。相反,<代码>收集器。summingInt(…)可以与其他收集器组合,例如,在groupingBy收集器中用作下游收集器。对于这些用例,使用哪种用例是毫无疑问的。

在您的特殊情况下,当您首先没有链接更多的操作或处理收集器时,这两种方法之间没有根本的区别。尽管如此,使用可读性更强的方法还是有道理的。通常,当流上有一个预定义的操作在执行相同的操作时,您不使用收集器。当您可以使用时,您不会使用收集(收集器。减少(…)。减少(…),好吗?

mapToInt(mapFunc). sum()不仅短路,它还遵循通常的从左到右的概念顺序,首先转换为int,然后将这些int相加。我认为这证明了更喜欢这个替代方案而不是。收集(Collectors.summingInt(mapFunc))

 类似资料:
  • 问题内容: 当您想对流中的整数值求和时,有两种主要方法: 第一个涉及对返回的整数装箱并将其取消装箱,但是第二个步骤涉及额外的步骤。 哪个更有效/更清晰? 问题答案: 您正在看两个否则不同的用例的交集。使用可使您在终端操作之前链接其他操作。相反,可以与其他收集器组合,例如用作收集器中的下游收集器。对于这些用例,毫无疑问要使用哪个。 在您的特殊情况下,当您不链接更多操作或不首先与收集器打交道时,这两种

  • 问题内容: 我很难理解为什么这些规则与指针类型.vs的方法集相关联。值类型 有人可以解释一下原因吗(从界面表的角度) (威廉·肯尼迪博客的摘录) 规格摘要 方法集 类型可能具有与之关联的方法集。接口类型的方法集是其接口。任何其他类型T的方法集都包含以接收者类型T声明的所有方法。相应指针类型 T的方法集是所有以接收者 T或T声明的方法的集合(也就是说,它还包含方法T集)。进一步的规则适用于包含匿名字

  • 我是使用Java8流API的新手,但我希望使用它来解决以下问题。假设我有一个名为的POJO,它包含、和属性,这些属性可以表示以下内容的每一行记录: 看起来如下: 上述四条记录需要合并为两条按名称分组的记录,其中: 属性求和 属性求和 组合记录包括属性,该属性是和的累加和相乘的结果。 因此,上述结果将是: 一个名为的不同POJO将表示组合记录的每一行记录: 有哪些好的方法/解决方案可以将输入的列表转

  • 我在Databricks上阅读下面的博客 https://databricks.com/blog/2015/03/30/improvements-to-kafka-integration-of-spark-streaming.html 在解释spark-kafka集成如何使用WAl接收器的过程时,它说 1.Kafka数据由在火花工作线程/执行程序中运行的Kafka接收器持续接收。这使用了Kafka

  • 不保留顺序。我可以使用列表,但我想指出,生成的集合不允许元素重复,这正是接口的用途。

  • 问题内容: 是什么决定了垃圾收集器何时真正收集?它是在一定时间之后还是在一定数量的内存用完之后发生的吗?还是还有其他因素? 问题答案: 它在确定是时候运行时运行。在世代垃圾收集器中,一种常见的策略是在第0代内存分配失败时运行收集器。也就是说,每次你分配一小块内存(大块通常直接放置在“旧”代中)时,系统都会检查gen-0堆中是否有足够的可用空间,如果没有,则运行GC释放空间以使分配成功。然后将旧数据