📜  Java| BiFunction 接口方法——apply() 和 addThen()

📅  最后修改于: 2022-05-13 01:54:23.545000             🧑  作者: Mango

Java| BiFunction 接口方法——apply() 和 addThen()

BiFunction 接口Java .util 的一部分。从Java 8 开始引入的函数包,用于在Java中实现函数式编程。它表示一个接受两个参数并产生结果的函数。

因此,这个功能接口接受 3 个参数,即:-

  • T :表示函数第一个参数的类型
  • U : 表示函数第二个参数的类型
  • R : 表示函数的返回类型

分配给 BiFunction 类型对象的 lambda 表达式用于定义其apply()最终将给定函数应用于参数。使用 BiFunction 的主要优点是它允许我们使用 2 个输入参数,而在函数中我们只能有 1 个输入参数。

BiFunction 接口中的函数

BiFunction 接口由以下两个函数组成:

1.申请()

此方法将给定函数应用于参数。

句法:

R apply(T t, U u)

参数:此方法有两个参数:

  • t - 第一个函数参数
  • u – 第二个函数参数

返回:此方法返回 R 类型的函数结果。

下面是说明 apply() 方法的代码:

方案一:

// Java Program to demonstrate
// BiFunction's apply() method
  
import java.util.function.BiFunction;
  
public class Main {
    public static void main(String args[])
    {
        // BiFunction to add 2 numbers
        BiFunction add = (a, b) -> a + b;
  
        // Implement add using apply()
        System.out.println("Sum = " + add.apply(2, 3));
  
        // BiFunction to multiply 2 numbers
        BiFunction multiply = (a, b) -> a * b;
  
        // Implement add using apply()
        System.out.println("Product = " + multiply.apply(2, 3));
    }
}
输出:
Sum = 5
Product = 6
2.addThen()

它返回一个组合函数,其中参数化函数将在第一个函数之后执行。如果任一函数的评估引发错误,则会将其转发给组合函数的调用者。

注意:作为参数传递的函数应该是函数而不是 BiFunction 类型。

句法:

default  
    BiFunction 
        andThen(Function after)

其中V是 after函数和组合函数的输出类型

参数:此方法接受一个参数,其后是该函数为一之后要应用的函数。

返回值:此方法返回一个组合函数,该函数首先应用当前函数,然后是 after函数

异常:如果 after函数为 null,则此方法抛出NullPointerException

下面是说明 addThen() 方法的代码:

方案一:

// Java Program to demonstrate
// BiFunction's addThen() method
  
import java.util.function.BiFunction;
  
public class Main {
    public static void main(String args[])
    {
        // BiFunction to demonstrate composite functions
        // Here it will find the sum of two integers
        // and then return twice their sum
        BiFunction composite1 = (a, b) -> a + b;
  
        // Using addThen() method
        composite1 = composite1.andThen(a -> 2 * a);
  
        // Printing the results
        System.out.println("Composite1 = " + composite1.apply(2, 3));
  
        // BiFunction to demonstrate composite functions
        // Here it will find the sum of two integers
        // and then return twice their sum
        BiFunction composite2 = (a, b) -> a * b;
  
        // Using addThen() method
        composite2 = composite2.andThen(a -> 3 * a);
  
        // Printing the result
        System.out.println("Composite2 = " + composite2.apply(2, 3));
    }
}
输出:
Composite1 = 10
Composite2 = 18

程序2:演示何时返回NullPointerException。

// Java Program to demonstrate
// BiFunction's addThen() method
  
import java.util.function.BiFunction;
  
public class Main {
    public static void main(String args[])
    {
        // BiFunction which finds the sum of 2 integers
        // and returns twice their sum
        BiFunction composite = (a, b) -> a + b;
  
        try {
            // Using addThen() method
            composite = composite.andThen(null);
  
            // Printing the result
            System.out.println("Composite = " + composite.apply(2, 3));
        }
        catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}
输出:
Exception: java.lang.NullPointerException

程序3:演示after函数中的异常是如何返回和处理的。

在下面的程序中,当 (2, 3) 作为参数传递给第一个函数时,它返回 sum 5。现在这个 sum 将作为参数传递给 after函数,即 addThen() 方法。这里将 5 传递给 after函数会导致 (5 – 5 = 0),即分母将变为 0。因此将引发 ArithmeticException。此异常将在 apply()函数中处理,而不是 addThen()函数。

// Java Program to demonstrate
// BiFunction's addThen() method
  
import java.util.function.BiFunction;
  
public class Main {
    public static void main(String args[])
    {
        // BiFunction which finds the sum of 2 integers
        // and returns twice their sum
        BiFunction composite = (a, b) -> a + b;
  
        // Using addThen() method
        composite = composite.andThen(a -> a / (a - 5));
  
        try {
            // Printing the result using apply()
            System.out.println("Composite = " + composite.apply(2, 3));
        }
        catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}
输出:
Exception: java.lang.ArithmeticException: / by zero

笔记:

  • 无法使用 addThen() 将 BiFunction 添加到现有 BiFunction。
  • BiFunction 接口在需要传递 2 个参数时很有用,不像函数接口只允许传递一个。但是,可以级联两个或多个函数对象以形成 BiFunction,但在这种情况下,不可能同时使用这两个参数。这就是 BiFunction 的实用性。
  • Lambda 表达式用于初始化 BiFunction 接口中的 apply() 方法。