如何解决Collectors.summingInt与mapToIntsum
您正在看两个否则不同的用例的交集。使用mapToInt(…)
可使您IntStream
在终端操作之前链接其他操作。相反,Collectors.summingInt(…)
可以与其他收集器组合,例如用作收集器中的下游收集groupingBy
器。对于这些用例,毫无疑问要使用哪个。
在您的特殊情况下,当您不链接更多操作或不首先与收集器打交道时,这两种方法之间没有根本区别。尽管如此,使用更具可读性的方法还是有道理的。通常,当流上存在预定义的操作时,您就不会使用收集器。collect(Collectors.reducing(…))
只要可以使用就不会使用.reduce(…)
,是吗?
不仅被mapToInt(mapFunc).sum()
短路,而且还遵循通常的从左到右的顺序进行概念上的处理,首先转换为anint
,然后将这些int
s
相加。我认为这证明了选择这种替代方案是合理的.collect(Collectors.summingInt(mapFunc))
。
解决方法
当您想对流中的整数值求和时,有两种主要方法:
ToIntFunction<...> mapFunc = ...
int sum = stream().collect(Collectors.summingInt(mapFunc))
int sum = stream().mapToInt(mapFunc).sum()
第一个涉及对返回的整数装箱并将其取消装箱,但是第二个步骤涉及额外的步骤。
哪个更有效/更清晰?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。