gpt4 book ai didi

Java 8 流管道性能

转载 作者:行者123 更新时间:2023-12-01 16:48:38 25 4
gpt4 key购买 nike

我对 java-08 中使用 Stream API 的性能增强有一些疑问。以下是java-06中的代码。

int sum = 0;
for (int x : numbers) {
sum += x;
}

这是java-8中的代码。

 int sum = numbers.stream().reduce(0, (x,y) -> x+y);

或者:

int sum = numbers.stream().reduce(0, Integer::sum);

问题:- 虽然两段代码的行数相同,但内部操作是如何进行的?这就是它转换为流并并行处理的方式。

最佳答案

首先,您的流不是并行流。您必须调用List#parallelStreamStream#parallel明确地。例如:

int sum = numbers.parallelStream().reduce(0, Integer::sum);

另一种总结 numbers 的方法是 map Stream<Integer>IntStream ,它确实拆箱 N次但是Stream#reduce拆箱吗2 *(N - 1)次和额外的装箱操作(如果流大小 > 2),例如:

int sum = numbers.parallelStream().mapToInt(Integer::intValue).sum();

对于“内部运行情况如何?”,您可以看到Eran的回答,据我所知他已经详细描述了并行流。

Stream#reduce 拆箱

1 + 2 + 3 + 4 + 5 的示例约简树如下,拆箱操作次数:N = 10 ( 1(2) + 5(2) + 9(2) + 6(2) + 15(2) ):

// v--- identity
0 1 2 3 4 5
1(2) 5(2) 9(2)
6(2) 9(/)
15(2)
// ^ ^--- unboxing times, `/` means doesn't reducing at this time
// |
// |--- the sum result of current reducing

关于Java 8 流管道性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com