JDK8中的函数式接口了解下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK8中的函数式接口了解下相关的知识,希望对你有一定的参考价值。
参考技术A 最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下函数式接口内容。我们知道使用Lambda表达式的前提是需要有函数式接口,而Lambda表达式使用时不关心接口名,抽象方法名。只关心抽象方法的参数列表和返回值类型。因此为了让我们使用Lambda表达式更加的方法,在JDK中提供了大量常用的函数式接口
在JDK中帮我们提供的有函数式接口,主要是在 java.util.function 包中。
无参有返回值的接口,对于的Lambda表达式需要提供一个返回数据的类型。
使用:
有参无返回值得接口,前面介绍的Supplier接口是用来生产数据的,而Consumer接口是用来消费数据的,使用的时候需要指定一个泛型来定义参数类型
使用:将输入的数据统一转换为小写输出
默认方法:andThen
如果一个方法的参数和返回值全部是Consumer类型,那么就可以实现效果,消费一个数据的时候,首先做一个操作,然后再做一个操作,实现组合,而这个方法就是Consumer接口中的default方法 andThen方法
具体的操作
有参有返回值的接口,Function接口是根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。有参数有返回值。
使用:传递进入一个字符串返回一个数字
默认方法:andThen,也是用来进行组合操作,
默认的compose方法的作用顺序和andThen方法刚好相反
而静态方法identity则是,输入什么参数就返回什么参数
有参且返回值为Boolean的接口
使用:
在Predicate中的默认方法提供了逻辑关系操作 and or negate isEquals方法
jdk1.8中的函数式接口
参考技术A JDK1.8使用的接口类。在CompletableFuture中大量的使用了这些函数式接口。注:这些声明大量应用于方法的入参中。像thenApply和thenAccept这俩就是一个用Function一个用Consumer
而lambda函数正好是可以作为这些接口的实现。例如 s->return 1; 这个就相当于一个Function。因为有入参和返回结果。
(1)Function
(2)Consumer
对于前面有Bi的就是这样的。BiConsumer就是两个参数的。
(3)Predicate这个接口声明是一个入参,返回一个boolean
(4)supplier
可以根据方法出入参的类型和数量来进行区分:
顺带提一句,CompletableFuture中的常用方法的命名基本是按照这个接口名称来的,可以方便记忆,如RunAsync方法和SupplyAsync方法就是一个入参使用Runable接口,该方法无返回值;一个就是使用Supplier接口,该方法有返回值
refer: https://blog.csdn.net/finalheart/article/details/87615546
以上是关于JDK8中的函数式接口了解下的主要内容,如果未能解决你的问题,请参考以下文章