Java 别再用复杂的if...else/switch了
程序员文章站
2024-01-06 11:52:10
...
在Java中,偶尔会遇到这样的情况:有很多条件需要判断,而且满足每个条件需要做的事情也不一样。在写代码时第一想法肯定是if...else了,可当代码写出来后,会发现很长一串的if,else if,代码很难看,如果当前的条件是最后一次才满足条件,那么程序需要去检查每一个if里的条件是否满足,这样似乎还会影响程序性能。
那么用什么来代替呢,很多人肯定可能会想到,肯定是switch了。网上有很多switch与if else的评论,也有将二者的性能拿出来做比较的,而在我现在工作的公司,不允许在判断条件多的时候是用if else,更不能用switch代替if else。那究竟该怎么办?于是在网上找了许久答案,终于有了个方向。用map代替,map的key代表需要判断的条件,而value则是满足条件时需要去干的事儿。于是,我照着自己的想法写了如下一个关于if的工具类。
import java.util.HashMap;
import java.util.Map;
/**
* @Author: MrZcc
* @Description:用来代替if...else...的工具类
* @Date: Created in 10:31 2019-1-3
* @Modified By:
*/
public class IfFunction<K> {
//map的key代表需要判断的条件,而value则是满足条件时需要去干的事儿
private Map<K, Function> map;
/**
* @Description: IfFunction需要一个映射来保存键和函数
* @date: 10:34 2019-1-3
* @param: map
* @return:
*/
public IfFunction(Map<K, Function> map) {
this.map = map;
}
/**
* @Description: 向集合添加键和功能
* @date: 10:36 2019-1-3
* @param: key 需要验证的键
* @param: function 满足键中条件执行的方法
* @return: com.daqsoft.resourcecenter.datashow.utils.IfFunction<K>
*/
public IfFunction<K> add(K key, Function function) {
this.map.put(key, function);
return this;
}
/**
* @Description: 确定**是否存在,如果存在,则执行相应的方法
* @date: 10:40 2019-1-3
* @param: key
* @return: void
*/
public void doIf(K key) {
if (this.map.containsKey(key)) {
map.get(key).invoke();
}
}
/**
* @Description: 确定**是否存在,如果存在,则执行相应的方法.否则执行defaultFunction
* @date: 10:41 2019-1-3
* @param: key
* @param: defaultFunction
* @return: void
*/
public void doIfWithDefault(K key, Function defaultFunction) {
if (this.map.containsKey(key)) {
map.get(key).invoke();
} else {
defaultFunction.invoke();
}
}
public static void main(String[] args) {
IfFunction<String> ifFunction=new IfFunction<>(new HashMap<>());
ifFunction.add("hello",()-> System.out.println("你好啊"))
.add("helloWorld",()-> System.out.println("你好啊,世界"))
.doIfWithDefault("helloWorld",()-> System.out.println("没有找到相应的key"));
}
}
/**
* @Author: MrZcc
* @Description:
* @Date: Created in 10:32 2019-1-3
* @Modified By:
*/
public interface Function {
/**
* @Description:需要做的操作
* @date: 10:32 2019-1-3
* @param:
* @return: void
*/
void invoke();
}
参考:https://blog.csdn.net/qq_36865969/article/details/80155776