• 廖雪峰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进行运算
  • 相关阅读:
    一轮项目冲刺——移山小分队(9)
    一轮项目冲刺——移山小分队(8)
    一轮冲刺项目——移山小分队(7)
    一轮项目冲刺——移山小分队(6)
    一轮项目冲刺——移山小分队(5)
    一轮项目冲刺——移山小分队(4)
    一轮项目冲刺——移山小分队(3)
    一轮项目冲刺——移山小分队(2)
    一轮项目冲刺——移山小分队(1)
    C# 记录循环消耗时间
  • 原文地址:https://www.cnblogs.com/csj2018/p/11481328.html
Copyright © 2020-2023  润新知