已解决
讲一下归约函数reduce 以及它的函数式接口BinaryOperator
来自网友在路上 153853提问 提问时间:2023-11-08 22:44:24阅读次数: 53
最佳答案 问答题库538位专家为你答疑解惑
归约函数(Reducing Function)是指一种将多个值组合成单个值的函数。在计算中,归约函数通常用于将一个集合或流中的元素聚合成一个结果。
Java 8 引入了 reduce
方法来执行集合的归约操作。reduce
方法接受一个归约函数作为参数,并将其应用于流中的元素来生成一个结果。在 reduce
方法中,归约函数接受两个参数:累加器(初始值或者上一次归约操作的结果)和当前元素,并返回一个新的累加器的值。
以下是 reduce
方法的示例签名:
Optional<T> reduce(BinaryOperator<T> accumulator)//这里的identity其实是一个默认值,用于保证返回值不为空Stream所以返回值都不需要用Optional<T>接受了
T reduce(T identity, BinaryOperator<T> accumulator)
以及它的使用举例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> sumOptional = numbers.stream().reduce((a, b) -> a + b);
int sum = sumOptional.orElse(0); // 结果为 15
用法很简单,这里主要讲一讲函数式接口BinaryOperator<T>
翻一下源码我们发现:
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
BinaryOperator继承自BiFunction<T,T,T>
它其实就是BiFunction的简化版,我们看看BiFunction源码
@FunctionalInterface
public interface BiFunction<T, U, R> {
看到没有人家是三种不同的泛型,简单来说就是输入前两种泛型的值,一顿骚操作 返回第三种泛型的值,那么问题来了具体的骚操作是啥呢?上代码:
static void demoFunction1(BiFunction<String, Integer, Long> biFunction) {Long sum = biFunction.apply("1", 2);System.out.println("计算值sum:" + sum);}public static void main(String[] args) {//演示调用demoFunction1方法demoFunction1((a, b) -> {System.out.println("参数a:" + a);System.out.println("参数b:" + b);return Long.valueOf(a) + Long.valueOf(b);});}
//控制台输出结果:
参数a:1
参数b:2
计算值sum:3
理解了BiFunction 在回头看看BinaryOperator是不是更简单
扩展:
其实还有类似的函数式
BiConsumer<T,U> 其相当于BiFunction没有指定的返回值类型也没有返回值 调用accept方法触发逻辑
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
BiConsumer<Integer, Integer> printSum = (a, b) -> System.out.println("Sum: " + (a + b));numbers.forEach(n -> printSum.accept(n, n+1));
// 输出:
// Sum: 2
// Sum: 4
// Sum: 6
// Sum: 8
// Sum: 10
BiPredicate<T,U> 其相当于BiFunction<T,U,Boolean> 这样理解是不是相当简单
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"讲一下归约函数reduce 以及它的函数式接口BinaryOperator":http://eshow365.cn/6-35630-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!