Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Collectors.summingit()与mapToInt().sum()的比较_Java_Java 8_Sum_Java Stream - Fatal编程技术网

Java Collectors.summingit()与mapToInt().sum()的比较

Java Collectors.summingit()与mapToInt().sum()的比较,java,java-8,sum,java-stream,Java,Java 8,Sum,Java Stream,当您要对流中的整数值求和时,有两种主要方法: ToIntFunction<...> mapFunc = ... int sum = stream().collect(Collectors.summingInt(mapFunc)) int sum = stream().mapToInt(mapFunc).sum() ToIntFunction mapFunc=。。。 int sum=stream().collect(Collectors.summingit(mapFunc)) in

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

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

int sum = stream().mapToInt(mapFunc).sum()
ToIntFunction mapFunc=。。。
int sum=stream().collect(Collectors.summingit(mapFunc))
int sum=stream().mapToInt(mapFunc.sum())
第一个步骤涉及装箱返回的整数并取消装箱,但第二个步骤涉及额外的步骤


哪个更有效/更清晰?

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

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


mapToInt(mapFunc).sum()不仅短,而且在概念上也遵循通常的从左到右的顺序,首先转换为
int
,然后将这些
int
相加。我认为这证明了我更倾向于使用这种方法而不是
.collect(Collectors.summingit(mapFunc))

纯粹是我的观点:第二种方法更容易阅读。如果你想知道哪种方法更有效,可以对其进行基准测试,但第二种方法对读者来说更清晰。好主意。你们说的是,这里的单一界面比组合界面简单。“我说得对吗,先生?”胡里·爪哇:这是一个方面。谢谢。你的回答让我想到,组合使用起来更复杂,因为你必须知道如何将它们组合在一起,例如:装饰设计模式。