Java 别再用复杂的if...else/switch了

在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 
 

猜你喜欢

转载自blog.csdn.net/zcczero/article/details/85684908