在使用lambda表达式的前提就是该接口为函数式接口(那些只有一个抽象方法的接口被叫做函数式接口式)
在jdk8中新添加了很多函数式接口,下面介绍一些常用的函数式接口
Supplier接口
Supplier接口被称为是供给型接口,原因是无需提供任何参数就可以得到一个返回值
上图可以看出在生成一个Supplier对象的时候可以直接使用lambda表达式来进行生成这样用最简便的代码快速创建了一个子类对象。Integer表示方法泛型返回的类型,而1则是返回的值。这样书写极大程度的简化了代码
用法:
上述则是Supplier类的基本用法,当一个方法的参数是Supplier类的时候我们则可以通过调用方法的时候直接使用lambda表达式来创建Supplier的子类对象。当内部的test2方法调用Supplier的get方法的时候则会进入到我们所书写的子类对象的方法中也就是在参数书写的方法体
Consumer接口
Consumer接口顾名思义被称为消费式接口
由源码可以看出consumer有两个方法一个式accept方法该方法的需要一个参数同时没有任何返回值。还有一个默认方法andThen,参数是一个consumer对象从方法体中可以看出先调用本对象的accept方法然后再调用参数对象的accept方法稍微有点类似责任链模式
用法:
上述的test2方法的参数使用了两个consumer类型,在方法体内调用了其中一个参数的andThen默认方法。可以看出当带哦用andthen方法的时候会生成一个新的Consumer类,将这个新的consumer类执行accpet方法之后会接连调用第一个和第二个参数的accpet方法达到一个组合使用的效果
Function接口:
Function接口被称为方法接口,他有两个泛型参数,第一个是泛型表示的是当前函数参数,第二个则是返回值类型
apply是function接口的主要方法,还有两个默认方法和一个静态方法。对于主要方法没什么可说的就是该接口的主要功能,对于compose默认方法则是与之前的andThen类似区别在于调用apply的顺序不同,下述代码可以看出compose方法是先调用参数的apply方法而andThen则是先调用本对象的apply方法,而对于静态方法identity主要作用则是直接返回传递的参数
Predicate接口:
Predicate则是含有传递的参数然后返回Boolean类型的结果
主方法则是test方法接收一个泛型的参数返回一个Boolean类型
而其他方法是一些对放回的结果做出的逻辑表达式
and方法是将参数的function对象test执行结果与本对象的test执行结果做与操作返回boolean值
negate方法则是非操作将当前的执行结果取反值
or方法则是将参数的function对象test执行结果与本对象的test执行结果做或操作并且返回boolean值
not方法是静态方法实际上是调用参数的negate方法