当您想要从流中求和整数值时,有两种主要的方法:
ToIntFunction<...> mapFunc = ...
int sum = stream().collect(Collectors.summingInt(mapFunc))
int sum = stream().mapToInt(mapFunc).sum()第一个涉及装箱返回的整数&取消装箱,但在第二个步骤涉及额外的步骤。
哪个更有效率/更清晰?
发布于 2016-05-04 10:25:04
您正在查看两个不同的用例的交集。使用mapToInt(…)可以在终端操作之前链接其他IntStream操作。相反,Collectors.summingInt(…)可以与其他收集器相结合,例如在groupingBy收集器中用作下游收集器。对于这些用例,毫无疑问要使用哪一种。
在特殊情况下,当您一开始不链接更多操作或处理收集器时,这两种方法之间没有根本区别。不过,使用更具可读性的方法还是有道理的。通常,当流上有预定义的操作执行相同操作时,不使用收集器。当您只使用collect(Collectors.reducing(…))时,您不会使用.reduce(…),对吗?
mapToInt(mapFunc).sum()不仅是空的,而且在概念上也遵循从左到右的顺序,首先转换为int,然后将这些int之和起来。我认为这是比.collect(Collectors.summingInt(mapFunc))更倾向于这种选择的理由。
https://stackoverflow.com/questions/37023822
复制相似问题