Collectors.summingInt() vs mapToInt().sum()



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

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

第一种是将返回的整数装箱;打开它,但在第二个步骤中还有一个额外的步骤。

哪个更高效/更清晰?

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

在您的特殊情况下,当您一开始既没有链接更多的操作,也没有处理收集器时,这两种方法之间没有根本区别。尽管如此,使用可读性更强的一个还是有意义的。通常,当流上有一个预定义的操作在做同样的事情时,您不使用收集器。当你可以只使用.reduce(…)时,你不会使用collect(Collectors.reducing(…)),是吗?

mapToInt(mapFunc).sum()不仅被缩短,而且在概念上也遵循通常的从左到右的顺序,首先转换为int,然后将这些int相加。我认为这证明了比起.collect(Collectors.summingInt(mapFunc))更喜欢这种替代方案。

最新更新