在开发过程中经常会利用if...else...停止判断抛出异常、分收处置等操做。那些if...else...充溢在代码中严峻影响了代码代码的美妙,那时我们能够操纵Java 8的Function接口来覆灭if...else...。
if (...){ throw new RuntimeException("呈现异常了");} if (...){ doSomething();} else { doOther();}Function 函数式接口利用注解@FunctionalInterface标识,而且只包罗一个笼统办法的接口是函数式接口。函数式接口次要分为Supplier供应型函数、Consumer消费型函数、Runnable无参无返回型函数和Function有参有返回型函数。
Function能够看做转换型函数
Supplier供应型函数Supplier的表示形式为不承受参数、只返回数据
Consumer消费型函数Consumer消费型函数和Supplier刚好相反。Consumer领受一个参数,没有返回值
Runnable无参无返回型函数Runnable的表示形式为即没有参数也没有返回值

Function函数的表示形式为领受一个参数,并返回一个值。Supplier、Consumer和Runnable能够看做Function的一种特殊表示形式
利用小技巧处置抛出异常的if1.定义函数
定义一个抛出异常的形式的函数式接口, 那个接口只要参数没有返回值是个消费型接口
@FunctionalInterfacepublic interface ThrowExceptionFunction { void throwMessage(String message);}2.编写判断办法
创建东西类VUtils并创建一个isTure办法,办法的返回值为适才定义的函数式接口-ThrowExceptionFunction。ThrowExceptionFunction的接口实现逻辑为当参数b为true时抛出异常
public static ThrowExceptionFunction isTure(boolean b){ return (errorMessage) -> { if (b){ throw new RuntimeException(errorMessage); } };}3.利用体例
挪用东西类参数参数后,挪用函数式接口的throwMessage办法传入异常信息。当收支的参数为false时一般施行

当收支的参数为true时抛出异常
处置if分收操做1.定义函数式接口
创建一个名为BranchHandle的函数式接口,接口的参数为两个Runnable接口。那两个两个Runnable接口别离代表了为true或false时要停止的操做
@FunctionalInterfacepublic interface BranchHandle { void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);}2.编写判断办法
创建一个名为isTureOrFalse的办法,办法的返回值为适才定义的函数式接口-BranchHandle。
public static BranchHandle isTureOrFalse(boolean b){ return (trueHandle, falseHandle) -> { if (b){ trueHandle.run(); } else { falseHandle.run(); } };}3.利用体例
参数为true时,施行trueHandle

参数为false时,施行falseHandle
若是存在值施行消费操做,不然施行基于空的操做1.定义函数
创建一个名为PresentOrElseHandler的函数式接口,接口的参数一个为Consumer接口。一个为Runnable,别离代表值不为空时施行消费操做和值为空时施行的其他操做
public interface PresentOrElseHandler<T extends Object> { void presentOrElseHandle(Consumersuper T> action, Runnable emptyAction); }2.编写判断办法
创建一个名为isBlankOrNoBlank的办法,办法的返回值为适才定义的函数式接口-PresentOrElseHandler。
public static PresentOrElseHandler isBlankOrNoBlank(String str){ return (consumer, runnable) -> { if (str == null || str.length() == 0){ runnable.run(); } else { consumer.accept(str); } };}3.利用体例
挪用东西类参数参数后,挪用函数式接口的presentOrElseHandle办法传入一个Consumer和Runnable
参数不为空时,打印参数

参数不为空时
结尾Function函数式接口是java 8十分重要的特征,操纵好Function函数能够极大的简化代码。






还没有评论,来说两句吧...