Java的8流 - 为什么我不能总结整数流?

罗伯特·尼斯特罗杰:

定整的清单: 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();

为什么我不能总结整数流?

rgettman:

调用stream()List会得到你一个通用的Stream,它可以处理任何引用类型,而不仅仅是数字类型。它没有意义为包括sum上方法Stream,因为它没有意义的总和URLS,ClassES,ThreadS,或任何其它非数字引用类型。

你可以总结通过调用元素reduce

numbers.stream().reduce(0, (a, b) -> a + b)

但是,这将涉及大量的拆箱和拳击。这将是最好的总结他们为你拥有了它,将它转换成IntStream,其上运行intS,并调用sum()(或者summaryStatistics(),其中包括数量,平均,最大和最小的额头一起)。

你甚至可以使用IntStream.of和避免装箱值甚至一度。

IntStream.of(1, 2, 3).sum()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章