定整的清单: List<Integer> numbers = Arrays.asList(1,2,3);
为什么我不能概括他们喜欢:numbers.stream().sum();
?
相反,我必须这样做: numbers.stream().mapToInt(e -> e).sum();
我知道mapToInt
产生IntStream
,原始的专业化。但我仍然不明白这一点。为什么不能把它总结整数?我知道,这个名单有整数和编译器应该能够做同样的。毕竟它现在可以推断出lambda表达式类型参数。
OK,一个整数可能为空,总和将失败。但是我能不能为和过滤空出的责任:
numbers.stream().filter(Objects::nonNull).sum();
为什么我不能总结整数流?
调用stream()
上List
会得到你一个通用的Stream
,它可以处理任何引用类型,而不仅仅是数字类型。它没有意义为包括sum
上方法Stream
,因为它没有意义的总和URL
S,Class
ES,Thread
S,或任何其它非数字引用类型。
你可以总结通过调用元素reduce
:
numbers.stream().reduce(0, (a, b) -> a + b)
但是,这将涉及大量的拆箱和拳击。这将是最好的总结他们为你拥有了它,将它转换成IntStream
,其上运行int
S,并调用sum()
(或者summaryStatistics()
,其中包括数量,平均,最大和最小的额头一起)。
你甚至可以使用IntStream.of
和避免装箱值甚至一度。
IntStream.of(1, 2, 3).sum()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句