zoukankan      html  css  js  c++  java
  • 廖雪峰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进行运算
  • 相关阅读:
    bzoj1015题解
    bzoj1013题解
    bzoj1012题解
    bzoj1011题解
    bzoj1010题解
    BZOJ4561: [JLoi2016]圆的异或并 计算几何+treap
    后缀数组 hash求LCP BZOJ 4310: 跳蚤
    prufer BZOJ1211: [HNOI2004]树的计数
    网络流
    BZOJ3160【万径人踪灭】 【FFT】
  • 原文地址:https://www.cnblogs.com/csj2018/p/11481328.html
Copyright © 2011-2022 走看看