在Java中,BiFunction接口用于封装接受两个参数并返回一个结果的计算逻辑,通过apply方法实现具体操作。以下是具体使用方法和示例:
1. 基本结构BiFunction<T, U, R> 定义如下:
- T:第一个输入参数的类型
- U:第二个输入参数的类型
- R:返回结果的类型
- 核心方法:R apply(T t, U u),需实现此方法定义计算逻辑。
2. 使用Lambda表达式实现计算通过Lambda表达式简化BiFunction的实现,适用于数学运算等场景。
示例1:两数相加
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;int result = add.apply(5, 3); // 返回8示例2:计算平均值
BiFunction<Double, Double, Double> average = (x, y) -> (x + y) / 2;double avg = average.apply(4.0, 6.0); // 返回5.0
3. 作为参数传递增强方法通用性将BiFunction作为方法参数,使同一方法支持不同计算逻辑。
- 示例:通用计算方法public static int compute(int a, int b, BiFunction<Integer, Integer, Integer> operation) { return operation.apply(a, b);}// 调用示例int sum = compute(10, 5, (x, y) -> x + y); // 加法,返回15int product = compute(10, 5, (x, y) -> x * y); // 乘法,返回50
4. 结合其他函数式接口链式处理与Function等接口结合,实现计算结果的后续处理。
- 示例:计算后格式化输出BiFunction<Integer, Integer, Integer> multiply = (a, b) -> a * b;Function<Integer, String> format = result -> "Result: " + result;String output = format.apply(multiply.apply(4, 5)); // 返回"Result: 20"
5. 注意事项- 类型匹配:确保Lambda表达式的参数类型和返回值类型与BiFunction的泛型定义一致。
- 空值处理:若输入可能为null,需在apply方法中添加判空逻辑,避免NullPointerException。BiFunction<Integer, Integer, Integer> safeDivide = (a, b) -> { if (b == 0) throw new IllegalArgumentException("除数不能为0"); return a / b;};
6. 完整代码示例import java.util.function.BiFunction;import java.util.function.Function;public class BiFunctionDemo { public static void main(String[] args) { // 1. 基本加法 BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b; System.out.println("5 + 3 = " + add.apply(5, 3)); // 输出8 // 2. 通用计算方法 System.out.println("10 + 5 = " + compute(10, 5, (x, y) -> x + y)); System.out.println("10 * 5 = " + compute(10, 5, (x, y) -> x * y)); // 3. 链式处理 BiFunction<Integer, Integer, Integer> multiply = (a, b) -> a * b; Function<Integer, String> format = result -> "Result: " + result; System.out.println(format.apply(multiply.apply(4, 5))); // 输出"Result: 20" } public static int compute(int a, int b, BiFunction<Integer, Integer, Integer> operation) { return operation.apply(a, b); }}总结- 核心优势:BiFunction通过抽象计算逻辑,提升代码复用性和可读性。
- 典型场景:数学运算、方法参数化、链式处理。
- 关键点:正确使用泛型、处理异常输入、结合其他函数式接口扩展功能。
通过合理使用BiFunction,可以编写出更灵活、简洁的Java代码。