JDK中有许多函数式接口,也会有许多方法会使用函数式接口作为参数,同时在各种源码中也大量使用了这些方法,那么我们在实际工作中应该如何使用!我们就来盘一盘,这样也有助于写出优雅的代码,使我们在阅读源码时事半功倍。
1 JDK中常见的Lamada表达式
Java中可以使用Lamada表达式的接口都有@FunctionalInterface注解。
先来看看util.function包下面含有FunctionalInterface注解的接口。一屏显示不全,可见功能非常齐全。
鉴于常用的一些函数式接口有Function/Consumer/Supplier/Predicate以及Runnable等。本篇介绍这几类接口。
1.1 Runnable
1 |
|
Runnable 使用Lamada方式书写时,无参数,无返回值。最终执行的是run方法
使用Demo
1 |
|
1.2 Function
Function 表示接受一个参数并产生结果的函数。
1 |
|
Function<T,R>接受一个参数T,并且有返回值 R, 其实现也主要是实现此方法 R apply(T t);
Function 的一个示例:
1 |
|
上述示例中是一个stream的map方法。其中x为输入参数,『”Java North and” + x』为输出。
1.3 Consumer
Consumer表示接受一个参数,没有返回值的操作,主要方法为 void accept(T t);
1 |
|
1.3.1 Consumer 在Java中的应用
常见的有List的forEach等。
1 |
|
x为参数,输出语句直接执行。
下面的map的forEach参数为BiConsumer,其入参有两个。
1 |
|
1.3.2 自动义带有Consumer的方法
1 |
|
1.4 Supplier
Supplier没有参数,有一个返回值。
1 |
|
Supplier 示例如下:
1 |
|
1.5 Predicate
主要方法为test,其主要是传入一个参数,返回一个boolean类型的值。
1 |
|
Predicate简单示例:
1 |
|
上述代码运行结果
1 |
|
2 常用的Lamada参数特征
Lamada 的一些表达式将方法的一些执行逻辑放到了参数中,使得方法的返回值根据传入的参数的逻辑而变化。从而实现了在一定的方法不变的情况下,使代码执行传入参数相关的逻辑。
常用的一些Lamada使用如下:
Runnable 无入参,无返回值。
1 |
|
Function 有入参,有返回值
1 |
|
Consumer有入参,无返回值。
1 |
|
Supplier 无入参,有返回值。
1 |
|
Predicate 有入参,返回一个boolean类型的值
1 |
|
3 自定义Lamada函数式接口
结合之前的常用Lamada函数的介绍,下面我们自定义一个简单的函数式接口。
1 |
|
其实很简单,就是展示了一下自定义函数式接口的应用实例而已。
总结
函数式接口的使用可以简化我们的代码,很大程度上提高代码的可读性。在程序执行上可能性能稍微有所降低,但对开发带来的便捷与好处是大于其性能上的微弱损失的。 除了介绍的几种常见的函数式编程以外,还有许多其他的函数式接口等着我们去利用。听完这些话之后,软软猿妹也对常用的函数式接口有所了解,接下来下定决心要好好学一学函数式接口了。