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

2022-09-01 17:41:09

当您想要对流中的整数值求和时,有两种主要方法可以做到这一点:

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

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

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

哪个更有效/更清晰?


答案 1

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

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

它不仅被缩短,而且还遵循通常从左到右的顺序,首先转换为一个,然后总结这些s。我认为这证明了我更喜欢这种替代方案而不是.mapToInt(mapFunc).sum()intint.collect(Collectors.summingInt(mapFunc))


答案 2

推荐