首页 > 编程笔记 > Java笔记 阅读:6

Java Function函数式接口的用法(附带实例)

在 Java 程序中,通常使用 lambda 表达式都需要先创建或调用已有的函数式接口,但 java.util.function 包已经提供了很多预定义函数式接口,就是没有实现任何功能,仅用来封装lambda 表达式的对象。

java.util.function 包中最常用的接口是 Function<T,R>,这个接口有以下两个泛型:
Function 接口是函数式接口,因此只有一个抽象方法,但是 Function 接口还提供了 3 个已实现的方法,以方便开发者对函数逻辑进行更深层的处理。

Function 接口方法如下表所示:

表: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

相关文章