[英]How does Java 8 mapToInt ( mapToInt(e -> e) )improves performance exactly?
我正在阅读“Java 8 Lambdas”这本书,并且在某些时候作者说:“由于性能优势,尽可能使用原始专用函数是个好主意。”
他在这里指的是mapToInt,mapToLong等。
事情是我不知道性能来自哪里说实话。
我们来看一个例子:
// Consider this a very very long list, with a lot of elements
List<Integer> list = Arrays.asList(1, 2, 3, 4);
//sum it, flavour 1
int sum1 = list.stream().reduce(0, (acc, e) -> acc + e).intValue();
//sum it, flavour 2
int sum2 = list.stream().mapToInt(e -> e).sum();
System.out.println(sum1 + " " + sum2);
因此,在第一种情况下,我使用reduce来对值求和,因此BinaryOperator函数将一直接收int(acc)和Integer(集合的当前元素),然后将对整数进行取消装箱int(acc + e)
在第二种情况下,我使用mapToInt,它将每个Integer解包成一个int,然后对它求和。
我的问题是,第二种方法有什么优势吗? 当我可以使用地图时,对于int的地图有什么意义呢?
所以是的,这只是糖语法还是有一些性能优势? 如果有,请提供一些信息
问候,
还有一个额外的拳击水平
int sum1 = list.stream().reduce(0, (acc, e) -> acc + e).intValue();
因为缩减函数是BinaryOperator<Integer>
- 它会传递两个Integer
值,取消它们,添加它们,然后重新打包结果。 mapToInt
版本从列表中取消一次 Integer
元素,然后使用该点的原始int
值作为IntStream
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.