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