JDK8函数式接口之Function

199 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

写在前面

JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的Function函数接口。

JDK8函数式接口之Function

Function函数式接口,其中定义了一个apply方法。

Function的全称其实是java.util.function.Function<T, R>, 其中的apply方法需要接收一个泛型为T的参数值,并且执行apply方法完成后,会返回一个泛型为R的结果对象。

在Lambda表达式经常会使用Function函数式接口,比如我们经常使用的map方法,经过map方法的转换,可以将对象中的某个属性进行转换,并且经由Collections方法转换成对应的List集合对象。

我们来说一下如何使用吧,虽然我们在实际开发中单独使用的不太多,但是还是要说一下的。

public static void main(String[] args) {
    Function<String, Integer> function = x -> Integer.parseInt(x);
    System.out.println(function.apply("123"));
    System.out.println(function.apply("123").getClass());
}

执行结果如下图所示:

image.png

经过上面的例子,我们就可以看出来,Function函数接口是可以对参数类型进行类型转换,无论是直接转换,还是强制转换。

andThen

andThen方法是Function接口中提供的一个默认方法,其功能就是在原有的基础上进行一个附加函数处理,下面来看一下具体代码示例:

public static void main(String[] args) {
    Function<String, Integer> function = Integer::parseInt;
    Function<Integer, Integer> function1 = x -> x + 1;
    System.out.println(function.andThen(function1).apply("123"));
    System.out.println(function.andThen(function1).apply("123").getClass());
}

执行结果如下:

image.png

总结

今天我们学习了Function函数式接口,使用此函数接口来给对象的数据类型进行了一个转换,也介绍了Function函数接口中的一些特定的方法,大家都学会了吗?