Stream reduce

前言

reduce是对Stream元素进行聚合求值,最常见的就是讲Stream的一连串的合成为单个值。
reduce方法有三个重载方法

Optional reduce(BinaryOperator accumulator);
T reduce(T identity, BinaryOperator accumulator);
 U reduce(U identity,
                 BiFunction accumulator,
                 BinaryOperator combiner);

第一个接受BinaryOperator的lambada表达式

List numList = Arrays.asList(1,2,3,4,5);
Optional result = numList.stream().reduce((a,b) -> a + b );

返回的是Optional类型的数据。

第二个签名实现和第一个唯一的区别是它首次执行的时候,表达式第一个参数并不是Stream的第一个元素,而是通过签名的第一个参数identity.

List numList = Arrays.asList(1,2,3,4,5);
Integer result = numList.stream().reduce(100, (a,b) -> a + b );

第三个参数比较复杂,由于前面两种实现有个缺陷,计算结果必须和stream的元素类型相同,如上面代码:stream 中类型为int,那么计算结果必须为int。导致灵活性不足。

List numList = Arrays.asList(1, 2, 3, 4, 5);
        String result = numList.stream().reduce("__", (a, b) -> a += String.valueOf(b), (x, t) -> null);

其实第三个参数用在并行流中才会执行,所以在非并行流中返回null值对整个结果不产生影响。

你可能感兴趣的:(Stream reduce)