Function 函數式接口
使用注解@FunctionalInterface標識,並且只包含一個抽象方法的接口是函數式接口。函數式接口主要分為:
- Supplier供給型函數:Supplier的表現形式為不接受參數、只返回數據。
- Consumer消費型函數:Consumer接收一個參數,沒有返回值。
- Runnable無參無返回型函數:Runnable的表現形式為即沒有參數也沒有返回值。
- Function有參有返回型函數:Function函數的表現形式為接收一個參數,並返回一個值。
1、處理業務異常
示例:
public void isTrue(String msg){
// 業務處理...
boolean conditon;
if(conditon){
throw new RuntimeException(msg);
}
}
Function函數式編程:
FuncUtil.isTure(conditon).throwMessage("測試異常");
第一步:定義一個拋出異常的函數式接口, 消費型接口:只有參數沒有返回值
@FunctionalInterface
public interface ThrowExceptionFunction {
/**
* 拋出異常信息
*
* @param message 異常信息
**/
void throwMessage(String message);
}
第二步:定義一個工具類 FuncUtil.isTure(boolean b)
/**
* 處理拋出異常
*/
public static ThrowExceptionFunction isTure(boolean b) {
return (errorMessage) -> {
if (b) {
throw new RuntimeException(errorMessage);
}
};
}
2、處理if...else...分支操作
示例:
public void isTureOrFalse(){
// 業務處理...
boolean a;
if(a){
System.out.println("true 邏輯");
} else {
System.out.println("false 邏輯");
}
}
Function函數式編程:
FuncUtil.isTureOrFalse(true)
.trueOrFalseHandle(() -> System.out.println("true 邏輯"), () -> System.out.println("false 邏輯"));
第一步:定義一個分支處理函數式接口,接口的參數為兩個Runnable接口。這兩個兩個Runnable接口分別代表了為true或false時要進行的操作
@FunctionalInterface
public interface BranchFunction {
/**
* 分支操作
*
* @param trueHandle 為true時要進行的操作
* @param falseHandle 為false時要進行的操作
**/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
第二步:定義一個工具類 FuncUtil.isTureOrFalse(boolean b)
/**
* 參數為true或false時,分別進行不同的操作
*/
public static BranchFunction isTureOrFalse(boolean b) {
return (trueHandle, falseHandle) -> {
if (b) {
trueHandle.run();
} else {
falseHandle.run();
}
};
}
3、處理if...else...分支操作,並消費輸入參數
示例:
public void isBlankOrNoBlank(String msg){
if(null==msg || ''==msg){
System.out.println("msg為空");
} else {
System.out.println("msg is:"+msg);
}
}
Function函數式編程:
FuncUtil.isBlankOrNoBlank("test")
.presentHandle(System.out::println,
()-> System.out.println("空字符串"));
第一步:定義一個PresentFunction的函數式接口,接口的參數一個為Consumer接口。一個為Runnable,分別代表值不為空時執行消費操作和值為空時執行的其他操作
public interface PresentFunction<T extends Object> {
/**
* 值不為空時執行消費操作
* 值為空時執行其他的操作
*
* @param action 值不為空時,執行的消費操作
* @param emptyAction 值為空時,執行的操作
**/
void presentHandle(Consumer<? super T> action, Runnable emptyAction);
}
第二步:定義一個工具類 FuncUtil.isTureOrFalse(boolean b)
/**
* 參數為true或false時,分別進行不同的操作
*/
public static PresentFunction<?> isBlankOrNoBlank(String str) {
return (consumer, runnable) -> {
if (str == null || str.length() == 0) {
runnable.run();
} else {
consumer.accept(str);
}
};
}
更多高級用法詳見github:https://gitee.com/open-cloud-framework/open-demo.git