Java Function函数式接口的用法(附带实例)
在 Java 程序中,通常使用 lambda 表达式都需要先创建或调用已有的函数式接口,但 java.util.function 包已经提供了很多预定义函数式接口,就是没有实现任何功能,仅用来封装lambda 表达式的对象。
java.util.function 包中最常用的接口是 Function<T,R>,这个接口有以下两个泛型:
Function 接口是函数式接口,因此只有一个抽象方法,但是 Function 接口还提供了 3 个已实现的方法,以方便开发者对函数逻辑进行更深层的处理。
Function 接口方法如下表所示:
【实例】使用 lambda 表达式拼接 IP 地址。创建 Function 接口对象,使用 lambda 表达式实现拼接 IP 地址的功能,具体代码如下:
java.util.function 包中最常用的接口是 Function<T,R>,这个接口有以下两个泛型:
- T:被操作的类型,可以理解为方法参数类型。
- R:操作结果类型,可以理解为方法的返回类型。
Function 接口是函数式接口,因此只有一个抽象方法,但是 Function 接口还提供了 3 个已实现的方法,以方便开发者对函数逻辑进行更深层的处理。
Function 接口方法如下表所示:
方法 | 功能说明 | 方法返回值 |
---|---|---|
apply(T t) | 抽象方法。按照被子类实现的逻辑,执行函数。参数为被操作泛型对象 | R |
andThen(Functionafter) | 先执行 apply(t) 方法,将执行结果作为该方法的参数,再按照 after 函数逻辑继续执行该方法 | (T t) -> after.apply(apply(t)) |
compose(Functionbefore) | 先按照 before 函数逻辑操作接口的被操作对象 t,再将执行结果作为 apply()方法的参数 | (V v) -> apply(before.apply(v)) |
static identity() | 此方法是静态方法。返回一个 Function 对象,此对象的 apply() 方法只会返回参数值 | t -> t |
【实例】使用 lambda 表达式拼接 IP 地址。创建 Function 接口对象,使用 lambda 表达式实现拼接 IP 地址的功能,具体代码如下:
import java.util.function.Function; public class FunctionDemo { //创建 Function 接口对象,参数类型是 Integer[],返回值类型是 String Function<Integer[], String> function = (n) -> { StringBuilder str = new StringBuilder(); //创建字符串 for (Integer num : n) { //遍历参数数组 str.append(num); //向字符序列中添加数组元素 str.append(':'); //向字符序列中添加字符':' } str.deleteCharAt(str.length() - 1); //删除末尾的':' return str.toString(); //返回字符串 }; public static void main(String[] args) { Integer[] ip = {192, 168, 1, 1}; //待处理的数组 FunctionDemo demo = new FunctionDemo(); //创建测试类对象 System.out.println(demo.function.apply(ip)); //输出处理结果 } }运行结果如下:
192.168.1.1