stream().reduce的combiner用法
时间: 2023-05-10 21:02:50 浏览: 124
stream().reduce的combiner是Java 8中新增的一个方法,它与传统的reduce方法版本略有不同。combiner相当于将并行流中的多个结果合并成最终结果的函数。
例如下面的代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = numbers.parallelStream().reduce(0, (a, b) -> a + b, (a, b) -> a + b);
```
上述代码创建了一个包含1到6数字的List,然后将其转换为并行流。reduce()方法中的第一个参数是初始值,为0,第二个参数是要执行的操作(在这里是将两个参数相加),第三个参数则是一个用于合并结果的操作(在这里也是将两个参数相加)。
combiner在并行流中的使用非常重要,因为它能显著地提高程序的性能。在并行流执行reduce时,数据会被分成多个chunk并行处理,然后结果将被合并。combiner是合并这些中间结果的函数,因此需要具有结合律和交换律。
例如:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
int sum = numbers.parallelStream().reduce(0, (a, b) -> a + b, (a, b) -> {
System.out.println("combiner: " + a + " + " + b + " = " + (a + b));
return a + b;
});
```
上述代码将在执行并行求和时打印出与combiner相关的信息,我们可以看到combiner会将不同chunk处理得到的中间结果连续合并:
```
combiner: 10 + 15 = 25
combiner: 25 + 19 = 44
combiner: 29 + 44 = 73
```
在使用并行流时,我们需要注意一些细节问题,因为如果不进行正确的设置,结果很可能会出乎意料,这里只是大致说明其用法和原理,具体细节还需另行学习。
阅读全文