欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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