-
Function
函數(shù)式接口-
Supplier
供給型函數(shù) -
Consumer
消費型函數(shù) -
Runnable
無參無返回型函數(shù) -
Function
函數(shù)的表現(xiàn)形式為接收一個參數(shù),并返回一個值。Supplier
、Consumer
和Runnable
可以看作Function
的一種特殊表現(xiàn)形式
-
- 使用小技巧
在開發(fā)過程中經(jīng)常會使用if...else...
進行判斷拋出異常、分支處理等操作。這些if...else...
充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8
的Function
接口來消滅if...else...
。
if(...){
thrownewRuntimeException("出現(xiàn)異常了");
}
if(...){
doSomething();
}else{
doOther();
}
Function
函數(shù)式接口
使用注解@FunctionalInterface
標識,并且只包含一個抽象方法
的接口是函數(shù)式接口
。函數(shù)式接口
主要分為Supplier
供給型函數(shù)、Consumer
消費型函數(shù)、Runnable
無參無返回型函數(shù)和Function
有參有返回型函數(shù)。
Function
可以看作轉(zhuǎn)換型函數(shù)
Supplier
供給型函數(shù)
Supplier
的表現(xiàn)形式為不接受參數(shù)、只返回數(shù)據(jù)
Consumer
消費型函數(shù)
Consumer
消費型函數(shù)和Supplier
剛好相反。Consumer
接收一個參數(shù),沒有返回值
Runnable
無參無返回型函數(shù)
Runnable
的表現(xiàn)形式為即沒有參數(shù)也沒有返回值
Function
函數(shù)的表現(xiàn)形式為接收一個參數(shù),并返回一個值。Supplier
、Consumer
和Runnable
可以看作Function
的一種特殊表現(xiàn)形式
基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能。
項目地址:https://github.com/YunaiV/ruoyi-vue-pro
使用小技巧
處理拋出異常的if
- 定義函數(shù)
定義一個拋出異常的形式的函數(shù)式接口
, 這個接口只有參數(shù)沒有返回值是個消費型接口
/**
*拋異常接口
**/
@FunctionalInterface
publicinterfaceThrowExceptionFunction{
/**
*拋出異常信息
*
*@parammessage異常信息
*@returnvoid
**/
voidthrowMessage(Stringmessage);
}
- 編寫判斷方法
創(chuàng)建工具類VUtils
并創(chuàng)建一個isTure
方法,方法的返回值為剛才定義的函數(shù)式接口
-ThrowExceptionFunction
。ThrowExceptionFunction
的接口實現(xiàn)邏輯為當參數(shù)b
為true
時拋出異常
/**
*如果參數(shù)為true拋出異常
*
*@paramb
*@returncom.example.demo.func.ThrowExceptionFunction
**/
publicstaticThrowExceptionFunctionisTure(booleanb){
return(errorMessage)->{
if(b){
thrownewRuntimeException(errorMessage);
}
};
}
- 使用方式
調(diào)用工具類參數(shù)參數(shù)后,調(diào)用函數(shù)式接口
的throwMessage
方法傳入異常信息。當出入的參數(shù)為false
時正常執(zhí)行
當出入的參數(shù)為true
時拋出異常
處理if分支操作
- 定義函數(shù)式接口
創(chuàng)建一個名為BranchHandle
的函數(shù)式接口,接口的參數(shù)為兩個Runnable
接口。這兩個兩個Runnable
接口分別代表了為true
或false
時要進行的操作
/**
*分支處理接口
**/
@FunctionalInterface
publicinterfaceBranchHandle{
/**
*分支操作
*
*@paramtrueHandle為true時要進行的操作
*@paramfalseHandle為false時要進行的操作
*@returnvoid
**/
voidtrueOrFalseHandle(RunnabletrueHandle,RunnablefalseHandle);
}
- 編寫判斷方法
創(chuàng)建一個名為isTureOrFalse
的方法,方法的返回值為剛才定義的函數(shù)式接口
-BranchHandle
。
/**
*參數(shù)為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticBranchHandleisTureOrFalse(booleanb){
return(trueHandle,falseHandle)->{
if(b){
trueHandle.run();
}else{
falseHandle.run();
}
};
}
- 使用方式
參數(shù)為true
時,執(zhí)行trueHandle
參數(shù)為false
時,執(zhí)行falseHandle
如果存在值執(zhí)行消費操作,否則執(zhí)行基于空的操作
- 定義函數(shù)
創(chuàng)建一個名為PresentOrElseHandler
的函數(shù)式接口,接口的參數(shù)一個為Consumer
接口。一個為Runnable
,分別代表值不為空時執(zhí)行消費操作和值為空時執(zhí)行的其他操作
/**
*空值與非空值分支處理
*/
publicinterfacePresentOrElseHandler<TextendsObject>{
/**
*值不為空時執(zhí)行消費操作
*值為空時執(zhí)行其他的操作
*
*@paramaction值不為空時,執(zhí)行的消費操作
*@paramemptyAction值為空時,執(zhí)行的操作
*@returnvoid
**/
voidpresentOrElseHandle(Consumer?superT>action,RunnableemptyAction);
}
- 編寫判斷方法
創(chuàng)建一個名為isBlankOrNoBlank
的方法,方法的返回值為剛才定義的函數(shù)式接口
-PresentOrElseHandler
。
/**
*參數(shù)為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticPresentOrElseHandler>isBlankOrNoBlank(Stringstr){
return(consumer,runnable)->{
if(str==null||str.length()==0){
runnable.run();
}else{
consumer.accept(str);
}
};
}
- 使用方式
調(diào)用工具類參數(shù)參數(shù)后,調(diào)用函數(shù)式接口
的presentOrElseHandle
方法傳入一個Consumer
和Runnable
參數(shù)不為空時,打印參數(shù)
參數(shù)不為空時
-End-
-
JAVA
+關注
關注
19文章
2967瀏覽量
104763 -
函數(shù)
+關注
關注
3文章
4331瀏覽量
62630
原文標題:妙用Java8中的“Function”消滅if...else!
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論