当前位置: 首页 > 面试题库 >

Collectors.summingInt()与mapToInt()。sum()

魏俊茂
2023-03-14
问题内容

当您想对流中的整数值求和时,有两种主要方法:

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

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

第一个涉及对返回的整数装箱并将其取消装箱,但是第二个步骤涉及额外的步骤。

哪个更有效/更清晰?


问题答案:

您正在看两个否则不同的用例的交集。使用mapToInt(…)可使您IntStream在终端操作之前链接其他操作。相反,Collectors.summingInt(…)可以与其他收集器组合,例如用作收集器中的下游收集groupingBy器。对于这些用例,毫无疑问要使用哪个。

在您的特殊情况下,当您不链接更多操作或不首先与收集器打交道时,这两种方法之间没有根本区别。尽管如此,使用更具可读性的方法还是有道理的。通常,当流上存在预定义的操作时,您就不会使用收集器。collect(Collectors.reducing(…))只要可以使用就不会使用.reduce(…),是吗?

不仅被mapToInt(mapFunc).sum()短路,而且还遵循通常的从左到右的顺序进行概念上的处理,首先转换为an
int,然后将这些ints
相加。我认为这证明了选择这种替代方案是合理的.collect(Collectors.summingInt(mapFunc))



 类似资料:
  • 如果要对流中的整数值求和,主要有两种方法: 第一个涉及装箱返回的整数 哪个更有效/更清晰?

  • 我有这样一个目标: 我很难理解为什么会这样:

  • 问题内容: 我正在尝试计算列表中值的平方和。以下是三个均计算所需值的变体。我想知道哪个是最有效的。我希望第三个装箱效率更高,因为自动装箱仅执行一次。 问题答案: 如有疑问,请测试!使用jmh,我在100k元素的列表上得到以下结果(以微秒为单位,更好): 因此,从快到慢,您已经拥有: 和 请注意,结果在很大程度上取决于JIT优化。如果映射中的逻辑更加复杂,则某些优化可能不可用(较长的代码=较少的内联

  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。

  • 连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。