廖雪峰Java16函数式编程-2Stream-6reduce

1. 聚合方法

Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果
例如:

    Stream.of(1, 2, 3, 4, 5).count(); //返回元素个数:5

2. reduce简介

reduce接收的对象是BinaryOperator接口,其定义了一个apply方法,负责把上次累加的结果和本次元素进行运算,并且返回累加的结果

Optional<T> reduce(BinaryOperator<T> accumulator)
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T>{
    //Bi操作后:两个输入,两个输出
    T apply(T t, T u); //负责把上次累加的结果和本次元素进行运算,并且返回累加的结果
}

例如:

Stream.of(1, 2, 6, 8, 9).reduce((acc, n)->acc+n); //求和运算:26
/*计算过程:
acc=1 //acc默认为第一个元素,也可以指定初始值
acc=acc+n=1+2=3
acc=acc+n=3+6=9
acc=acc+n=9+8=17
acc=acc+n=17+9=26
*/

3.reduce代码示例

import java.util.stream.Stream;

public class StreamReduceSample {
    public static void main(String[] args){
        int r = Stream.of(1,2,3,4,5,6,7,8,9).reduce((acc, x)->acc*x).get();
        System.out.println(r);
        int r2 = Stream.of(1,2,3,4,5,6,7,8,9).reduce(100,(acc, x)->acc*x);
        System.out.println(r2);
    }
}
public class StreamReduceSample2 {
    public static void main(String[] args){
        String[] array = "Stream API supports functional-style operation".split(" ");
        String result = Arrays.stream(array).map(String::toLowerCase).reduce((acc, s)->(acc+"~"+s)).get();
        System.out.println(result); //stream~api~supports~functional-style~operation
    }
}

4. reduce方法总结:

  • 1.将一个Stream的每个元素依次作用于BigFunction,并将结果合并
  • 2.reduce是聚合方法
  • 3.聚合方法会立刻对Stream进行运算
posted on 2019-09-07 15:57  singleSpace  阅读(234)  评论(0编辑  收藏  举报