Stream-reduce的使用

提供方法

  • 无初始值,返回值可能为空,只有累加器表达式。
Optional<T> reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator);
  • 第三个参数只有当并行流时才起作用,串行流时,第三个参数无效哦。
<U> U reduce(U identity,
                 BiFunction<U, ? super T, U> accumulator,
                 BinaryOperator<U> combiner);

示例

public class MyStream {
    public static void main(String[] args) {
        Integer sum = Stream.of(1, 2, 3).parallel()
                .reduce(100, (a, b) -> a + b, (result1, result2) -> result1 + result2);//等同于下方,下方语句便于打印每一步的输出结果。
        System.out.println(sum);
        Integer sum1 = Stream.of(1, 2, 3).parallel()
                .reduce(100, (a, b) -> {
                    System.out.println("in accumulator, a = "
                            + a + ", b = " + b);
                    return a + b;
                }, (result1, result2) -> {
                    System.out.println("in accumulator, result1 = "
                            + result1 + ", result2 = " + result2);
                    return result1 + result2;

                });
        System.out.println(sum1);
    }
}

控制台输出

306
in accumulator, a = 100, b = 2
in accumulator, a = 100, b = 1
in accumulator, a = 100, b = 3
in accumulator, result1 = 102, result2 = 103
in accumulator, result1 = 101, result2 = 205
306

分析

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210124065639940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYwMDkxMA==,size_16,color_FFFFFF,t_70)

  • 并行 Stream 和 顺序 Stream 的差异在于初始值,并行流初始值不变
  • 累加结果并不是 101,102,103,并行执行导致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值