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中的函数式接口了解下的主要内容,如果未能解决你的问题,请参考以下文章

JDK8新特性-函数式接口和Lambda表达式

必看:深入学习Java8中的函数式接口

JDK8新特性之函数式接口

JDK8系列之使用Function函数式接口实现回调

JDK8常见函数式接口

JDK8系列之使用Function函数式接口实现回调