妙用Java 8中的 Function接口 消灭if...else(非常新颖的写法)
程序员的成长之路
共 3640字,需浏览 8分钟
·
2021-12-01 01:19
阅读本文大概需要 3 分钟。
来自:juejin.cn/post/7011435192803917831
if (...){
throw new RuntimeException("出现异常了");
}
if (...){
doSomething();
} else {
doOther();
}
Function可以看作转换型函数
![](https://filescdn.proginn.com/396e13e5bd5de72abb3a4d47c6e0d48c/dd8c9205252de234347af87ade42764a.webp)
![](https://filescdn.proginn.com/30e3ae5161b887cd6208486edfe72962/9d6c43e49f320d8957a178819a8ca835.webp)
![](https://filescdn.proginn.com/7198341c042088b5b09052c42257513e/d8dc1d87b1cc83d894125cb61e604d17.webp)
![](https://filescdn.proginn.com/3ba0fe9b294388fbaa9eecb9972c1edc/9aa98aa29991b33ddbfdccad6eb2d340.webp)
/**
* 抛异常接口
**/
@FunctionalInterface
public interface ThrowExceptionFunction {
/**
* 抛出异常信息
*
* @param message 异常信息
* @return void
**/
void throwMessage(String message);
}
/**
* 如果参数为true抛出异常
*
* @param b
* @return com.example.demo.func.ThrowExceptionFunction
**/
public static ThrowExceptionFunction isTure(boolean b){
return (errorMessage) -> {
if (b){
throw new RuntimeException(errorMessage);
}
};
}
![](https://filescdn.proginn.com/994ecc8e933acff21f2b739cff18aec4/22465393d1534b8b9ac6c7f7d5d570b4.webp)
![](https://filescdn.proginn.com/0e003a834df3ee5eef2b25671c19bc57/2fe8d4e71007f35bffbd40fc0df558be.webp)
/**
* 分支处理接口
**/
@FunctionalInterface
public interface BranchHandle {
/**
* 分支操作
*
* @param trueHandle 为true时要进行的操作
* @param falseHandle 为false时要进行的操作
* @return void
**/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
/**
* 参数为true或false时,分别进行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static BranchHandle isTureOrFalse(boolean b){
return (trueHandle, falseHandle) -> {
if (b){
trueHandle.run();
} else {
falseHandle.run();
}
};
}
![](https://filescdn.proginn.com/4a8d44516174f0d5e363e68a582741cc/2db5b23a486f994b040a603b1232df08.webp)
![](https://filescdn.proginn.com/63fcf26b09ed6512dcd77eb33e874e7d/9f872375ef03c6b72d468690d883e522.webp)
/**
* 空值与非空值分支处理
*/
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不为空时执行消费操作
* 值为空时执行其他的操作
*
* @param action 值不为空时,执行的消费操作
* @param emptyAction 值为空时,执行的操作
* @return void
**/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
/**
* 参数为true或false时,分别进行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static PresentOrElseHandler > isBlankOrNoBlank(String str){
return (consumer, runnable) -> {
if (str == null || str.length() == 0){
runnable.run();
} else {
consumer.accept(str);
}
};
}
![](https://filescdn.proginn.com/fed72df70190aa778b25e545f02344f5/6fe9a8f8e4666fd88d5e8da480408965.webp)
![](https://filescdn.proginn.com/abd4f4e5befa414453212e70570eaa4e/be33bd4aedd94eb898c94df0272f34c2.webp)
推荐阅读:
心态崩了!税前2万4,到手1万4,年终奖扣税方式1月1日起施行~
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论