讲一下归约函数reduce 以及它的函数式接口BinaryOperator

归约函数(Reducing Function)是指一种将多个值组合成单个值的函数。在计算中,归约函数通常用于将一个集合或流中的元素聚合成一个结果。

Java 8 引入了 reduce 方法来执行集合的归约操作。reduce 方法接受一个归约函数作为参数,并将其应用于流中的元素来生成一个结果。在 reduce 方法中,归约函数接受两个参数:累加器(初始值或者上一次归约操作的结果)和当前元素,并返回一个新的累加器的值。

以下是 reduce 方法的示例签名:

Optional reduce(BinaryOperator accumulator)

//这里的identity其实是一个默认值,用于保证返回值不为空Stream所以返回值都不需要用Optional接受了
T reduce(T identity, BinaryOperator accumulator)

以及它的使用举例:        

List numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional sumOptional = numbers.stream().reduce((a, b) -> a + b);
int sum = sumOptional.orElse(0); // 结果为 15

 用法很简单,这里主要讲一讲函数式接口BinaryOperator

翻一下源码我们发现:

@FunctionalInterface
public interface BinaryOperator extends BiFunction {

 BinaryOperator继承自BiFunction

它其实就是BiFunction的简化版,我们看看BiFunction源码

@FunctionalInterface
public interface BiFunction {

看到没有人家是三种不同的泛型,简单来说就是输入前两种泛型的值,一顿骚操作 返回第三种泛型的值,那么问题来了具体的骚操作是啥呢?上代码:

    static void demoFunction1(BiFunction 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  其相当于BiFunction没有指定的返回值类型也没有返回值  调用accept方法触发逻辑
List numbers = Arrays.asList(1, 2, 3, 4, 5);
BiConsumer 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 其相当于BiFunction 这样理解是不是相当简单

 

你可能感兴趣的:(java,函数式接口,BiFunction,BinaryOperator)