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 super R, ? extends V> 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() 方法。