bifunction 是 java 8 提供的函数式接口,接收两个参数 t、u 并返回结果 r;常用 lambda 实现,如 (s1,s2) -> (s1+s2).touppercase();适用于 map 计算、stream 二元操作等场景。

BiFunction 是 Java 8 引入的函数式接口,专门用于接收两个参数,并返回一个结果。它的定义是:
interface BiFunctionR apply(T t, U u);
}
其中:
• T 是第一个参数类型
• U 是第二个参数类型
• R 是返回值类型
如何使用 BiFunction 接收两个参数并返回结果
你可以用 Lambda 表达式、方法引用或匿名内部类实现它。最常用的是 Lambda:
- 写法:`(param1, param2) -> 表达式或语句`
- 参数类型由泛型自动推断,无需显式声明(除非编译器无法推断)
- 返回值必须与声明的泛型 R 类型兼容
例如,把两个字符串拼接并转大写:
BiFunctionString result = concatAndUpper.apply("hello", "world"); // 返回 "HELLOWORLD"
常见应用场景
- Map 的 computeIfAbsent / computeIfPresent:传入 key 和 old value 计算新值
- Stream.reduce(BinaryOperator) 的升级版:当需要两个不同类型的输入时(如累加器 + 元素)
- 自定义二元运算逻辑:比如比较两个对象后返回 int、合并两个 DTO、计算坐标距离等
注意返回类型和空值处理
- 返回值可以是基本类型包装类(如 Integer),但不能是原始类型(int 不行,Integer 可以)
- 如果逻辑中可能返回 null,调用方需自行判空;BiFunction 本身不约束 null 安全
- 若需处理异常,需自己包装成 RuntimeException,因为 apply() 方法不抛受检异常
和类似接口的区别
-
BinaryOperator
是 BiFunction 的子接口,要求两个输入和输出类型相同 -
BiConsumer
也接收两个参数,但不返回任何值(void) -
Function
只接收一个参数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











