Java8新特性-010-Stream规约-终止操作

方法名描述
reduce(T iden, BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回T
reduce(BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回Optional

备注:map 和reduce 的连接通常称为map-reduce 模式,因Google 用它来进行网络搜索而出名。

测试代码

TestReduce.java

package java8.reduce;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import org.junit.Test;

/** 
* @author 微信公众号:JavaWeb架构师
* @version 创建时间:2017年12月29日 上午9:54:15 
*/
public class TestReduce {
    private List<Integer> listInteger = Arrays.asList(1,2,-1,-2,-3,10,11,50,-50);

    /**
     * 1.规约
     *  reduce(T iden, BinaryOperator b)    可以将流中元素反复结合起来,得到一个值。返回T
     *  reduce(BinaryOperator b)            可以将流中元素反复结合起来,得到一个值。返回Optional<T>
     */

    // 1.reduce(T iden, BinaryOperator b):起始值为iden,累计的做b操作
    @Test
    public void test1() {

        /**
         * T reduce(T identity,BinaryOperator<T> accumulator):
         * 使用提供的身份值和associative累积功能对此流的元素执行reduction ,
         * 并返回减小的值。  
         * 这是一个terminal operation 。 
         * API Note: 
         * 总和,最小,最大,平均和字符串连接都是减少的特殊情况。 一个数字流可以表示为: 
         *  Integer sum = integers.reduce(0, (a, b) -> a+b);  要么: 
         *      Integer sum = integers.reduce(0, Integer::sum);  尽管与简单地将循环
         *      中的总体变量相比,这可能看起来更为迂回的方式进行,但减少操作更平稳地并行化,
         *      而不需要额外的同步,并大大降低了数据竞争的风险。 
         * 参数 
         *  identity - 累积函数的身份值 
         *  accumulator -一个 associative , non-interfering , stateless功能组合两个值  
         */
        // 计算集合中所有元素的总和(0与第一个元素相加得结果s1,s1再与第二个元素相加得结果s2,……)
        Integer sum = listInteger.stream().reduce(0,(a,b) -> a+b);

        System.out.println("总和是:" + sum);

        /*
         * 结果:
         *  总和是:18
         */
    }


    // reduce(BinaryOperator b):可以将流中元素反复结合起来,得到一个值。返回Optional<T>
    @Test
    public void test2() {
        /**
         * Optional<T> reduce(BinaryOperator<T> accumulator):
         * 使用associative累积函数对此流的元素执行reduction ,并返回描述减小值(如果有的话)
         * 这是一个terminal operation 。 
         * 参数 
         *  accumulator -一个 associative , non-interfering , stateless功能组合两个值 
         * 结果 
         *  一个Optional描述了减少的结果 
         */
        // 计算集合中所有元素的总和(第一个元素与第二个元素相加得结果s1,……)
        Optional<Integer> reduce = listInteger.stream().reduce(Integer::sum);

        System.out.println("总和是:" + reduce.get());

        /*
         * 结果:
         *  总和是:18
         */
    }
}

微信公众号:JavaWeb架构师


其它

  • 源码下载
关注下方公众号,回复:Java8.code

完整教程PDF版本下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值