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 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章