public class test {
//规约
@Test
public void test1(){
//reduce(T iden, BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回T
//参数1是初始值
//例子:计算1-10的自然数的和
List<Integer> list=Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//Integer中有一个静态方法叫做sum,要传入两个int,求和后返回int
//参数2的函数式接口的抽象方法也是要两个T,返回T,所以可以用方法引用
Integer sum = list.stream().reduce(0, Integer::sum);
System.out.println(sum);//55
Integer sum1= list.stream().reduce(10, Integer::sum);
System.out.println(sum1);//65
//reduce(BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回 Optional<T>
//例子:计算所有员工工资的和
List<Employee> list1 = EmployeeData.getEmployees();
//Double也有一个加sum的方法
Optional<Double> sumMoney = list1.stream().map(e -> e.getSalary()).reduce(Double::sum);
//BinaryOperator这个函数式接口的抽象方法的形参为T T,返回类型为T
System.out.println(sumMoney);//Optional[48424.08]
//也可以这么写
Optional<Double> sumMoney1 = list1.stream().map(e -> e.getSalary()).reduce((d1,d2)->d1+d2);//d1,d2是工资
System.out.println(sumMoney1);//Optional[48424.08]
}
}
Stream的终止操作2:规约
最新推荐文章于 2020-10-30 16:53:36 发布