您的位置:首页 > 编程语言 > Java开发

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

2018-01-06 13:57 591 查看
方法名描述
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
*/
}
}




其它

源码下载

关注下方公众号,回复:Java8.code


欢迎加入交流群:451826376

更多信息:www.itcourse.top

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: