在Java中,Function
和BiConsumer
都是函数式接口,它们是Java 8引入的新特性,旨在支持函数式编程风格和Lambda表达式的使用。这些接口位于java.util.function
包下。
Function<T, R>
Function<T, R>
接口表示一个接受一个类型为T
的输入参数,产生一个类型为R
的结果的函数。它包含一个抽象方法R apply(T t)
,用于执行转换操作。
用途示例:
Function<String, Integer> stringToInt = s -> Integer.parseInt(s);
int result = stringToInt.apply("123"); // 结果为123
BiConsumer<T, U>
BiConsumer<T, U>
接口代表一个接受两个输入参数(类型分别为T
和U
)且无返回值的操作。它包含一个抽象方法void accept(T t, U u)
,用于执行操作。
用途示例:
BiConsumer<String, String> printPair = (first, second) -> System.out.println(first + ", " + second);
printPair.accept("Hello", "World"); // 输出: Hello, World
区别
-
返回值:
Function
接口的apply
方法会产生一个新的结果,有输出类型;而BiConsumer
接口的accept
方法没有返回值,主要用于执行操作或消费数据。 - 参数数量:
Function
只接受一个参数;BiConsumer
接受两个参数。 - 用途:
Function
常用于数据转换场景,如流处理中的映射操作;而BiConsumer
适合于需要对两个参数执行某种操作但不需要返回结果的情景,比如事件监听器中处理事件和上下文信息。
两者都是构建复杂操作的基础组件,通过组合这些接口,可以设计出更加灵活和强大的函数式编程逻辑。