reduce规约:深入理解java8中的规约reduce

零 Java教程评论75字数 1208阅读4分1秒阅读模式

reduce规约:深入理解java8中的规约reduce

常见场景图示

我们常见使用场景:累加、求最大值 如图示 累加:

image.png 最大值文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

image大.png文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

reduce中的BiFunctionBinaryOperator是什么

reduce定义如下: T reduce(T identity, BinaryOperator<T> accumulator);文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

首先了解一下BiFunctionBinaryOperator 带有BinaryBi关键字都是二元运算(就是谓词带有 有两个形参)文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

image.png文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

BiFunction函数式接口如下: 传入 T类型变量t U类型变量u 返回R类型变量文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

java

代码解读
复制代码
@FunctionalInterface
// (T t,U u)->R
public interface BiFunction<T, U, R> {
    R apply(T t, U u);
}

BinaryOperator函数式接口如下: 继承BiFunction 形参类型和返回类型相同文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

java

代码解读
复制代码
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
    
}

理解reduce

reduce常见的定义方式:文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

T reduce(T identity, BinaryOperator accumulator);文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

Optional<T> reduce(BinaryOperator<T> accumulator);文章源自灵鲨社区-https://www.0s52.com/bcjc/javajc/16963.html

下面详细解释

T reduce(T identity, BinaryOperator accumulator);

第一个参数传入T类型值,第二分谓词 (T t,T t)->T 返回值类型为T

通俗点总结: 一个初始值 一个Lambda来把两个流元素结合起来并产生一个新值

常用:累加、累积

Optional reduce(BinaryOperator accumulator);

谓词 (T t,T t)->T 返回值类型为T

Optional容器类表示一个值存在或者不存在,避免和null检查

reduce要考虑新的值和下一个元素,将流中的第一个元素作为初始值,比较产生最大值,然后继续和下一个元素比较。

常用:最大值,最小值

代码举例

最开始的图示的代码如下:

累加:

java

代码解读
复制代码
List<Integer> integers = Arrays.asList(4, 5, 3, 9);
Integer reduce = integers.stream().reduce(0, (a, b) -> a + b);
System.out.println("求和:"+reduce);
//求和:21

image.png

求最大值

java

代码解读
复制代码
List<Integer> integers = Arrays.asList(4, 5, 3, 9);
Optional<Integer> reduce = integers.stream().reduce(Integer::max);
System.out.println("最大值:" + reduce.get());
//最大值:9

image大.png

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/javajc/16963.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论