妙用Java 8中的 Function接口 消灭if...else
处理 if 分支操作
- 定义函数式接口
创建一个名为 BranchHandle 的函数式接口,接口的参数为两个 Runnable 接口。这两个两个 Runnable 接口分别代表了为 true 或 false 时要进行的操作
/**
* 分支处理接口
**/
@FunctionalInterface
public interface BranchHandle {
/**
* 分支操作
*
* @param trueHandle 为true时要进行的操作
* @param falseHandle 为false时要进行的操作
* @return void
**/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
- 编写判断方法
在VerifyUtils类中创建一个名为 isTureOrFalse 的方法,方法的返回值为刚才定义的 函数式接口-BranchHandle。
public class VerifyUtils {
/**
* 参数为true或false时,分别进行不同的操作
* @author hubz
* @date 2022/5/10 14:43
*
* @param expression 布尔表达式
* @return com.hubz.minimdmanage.common.utils.branchHandle.BranchHandle
**/
public static BranchHandle isTureOrFalse(Boolean expression) {
return (trueHandle, falseHandle) -> {
if (expression) {
trueHandle.run();
} else {
falseHandle.run();
}
};
}
}
- 使用方式
参数为 true 时,执行 trueHandle

参数为 false 时,执行 falseHandle

如果存在值执行消费操作,否则执行基于空的操作
- 定义函数
创建一个名为 PresentOrElseHandler 的函数式接口,接口的参数一个为 Consumer 接口。一个为 Runnable,分别代表值不为空时执行消费操作和值为空时执行的其他操作
/**
* 空值与非空值分支处理
*/
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不为空时执行消费操作
* 值为空时执行其他的操作
*
* @param action 值不为空时,执行的消费操作
* @param emptyAction 值为空时,执行的操作
* @return void
**/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
- 编写判断方法
在VerifyUtils类中创建一个名为 isBlankOrNoBlank 的方法,方法的返回值为刚才定义的 函数式接口-PresentOrElseHandler。
/**
* 参数为空和非空时,分别进行不同的操作
* @author hubz
* @date 2022/5/10 14:50
*
* @param str 参数
* @return com.hubz.minimdmanage.common.utils.handle.PresentOrElseHandler<?>
**/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str) {
return (consumer, emptyRunnable) -> {
if (str == null || str.length() == 0) {
emptyRunnable.run();
} else {
consumer.accept(str);
}
};
}
- 使用方式
调用工具类参数参数后,调用 函数式接口 的 presentOrElseHandle 方法传入一个 Consumer 和 Runnable
参数不为空时:

参数为空时:

原文
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果