1. 程式人生 > 其它 >java優化if和switch,使用map代替條件判斷

java優化if和switch,使用map代替條件判斷

碰到個場景: 傳入兩個引數,通過對這兩個引數的判斷,返回一個對應的值。但是這兩個引數的種類有很多,所以如果用if或者switch判斷的話,程式碼會很多重複,也會很長,而且if使用過多複雜度太高,打包也不容易通過。

最後決定使用map,用過key值的匹配實現條件判斷的效果,傳入兩個引數進行key匹配,返回對應的value值

優化前:使用switch, 程式碼客觀性比使用if好一些,但是重複程式碼太多了,邏輯看著也不是很清晰

public static CardTypeCombineCycleTypeEnum combineCardTypeCycleType(CardTypeEnum cardType, CycleTypeEnum cycleType) {

        switch (cycleType) {
            case WEEK:
                break;
            case MONTH:
                switch (cardType) {
                    case GOLD:
                        return GOLD_MONTH;
                    case NORMAL:
                        return NORMAL_MONTH;
                    case ZXK:
                        return ZXK;
                }
                break;
            case QUARTER:
                switch (cardType) {
                    case NORMAL:
                        return NORMAL_QUARTER;
                    case ZXK:
                        return ZXK;
                }
                break;
            case HALF_YEAR:
                switch (cardType) {
                    case GOLD:
                        return GOLD_HALF_YEAR;
                    case NORMAL:
                        return NORMAL_HALF_YEAR;
                    case ZXK:
                        return ZXK;
                }
                break;
            case YEAR:
                switch (cardType) {
                    case GOLD:
                        return GOLD_YEAR;
                    case NORMAL:
                        return NORMAL_YEAR;
                    case ZXK:
                        return ZXK;
                }
                break;
        }
        return null;
    }

優化後:使用map

    public static Map<String, CardTypeCombineCycleTypeEnum> combineMap = new HashMap<>();
    static {
        combineMap.put("WHITE_GOLD", WHITE_GOLD);
        combineMap.put("GOLD_MONTH", GOLD_MONTH);
        combineMap.put("GOLD_HALF_YEAR", GOLD_HALF_YEAR);
        combineMap.put("GOLD_YEAR", GOLD_YEAR);
        combineMap.put("PLATINUM", PLATINUM);
        combineMap.put("NORMAL_MONTH", NORMAL_MONTH);
        combineMap.put("NORMAL_QUARTER", NORMAL_QUARTER);
        combineMap.put("NORMAL_HALF_YEAR", NORMAL_HALF_YEAR);
        combineMap.put("NORMAL_YEAR", NORMAL_YEAR);
        combineMap.put("NEW_VIP", NEW_VIP);
        combineMap.put("ZXK", ZXK);
    }


    public static CardTypeCombineCycleTypeEnum combineCardTypeCycleTypeMap(String cardType, String cycleType) {
        return combineMap.get(cardType + "_" + cycleType);
    }

測試程式碼

    @Test
    public void test_combineCardTypeCycleType() {
        CardTypeCombineCycleTypeEnum s = memberUtil.combineCardTypeCycleType(NORMAL, HALF_YEAR);
        System.out.println(s.getCode());
        System.out.println(s.getDescription());
    }

    @Test
    public void test_combineCardTypeCycleTypeMap() {
        CardTypeCombineCycleTypeEnum s = memberUtil.combineCardTypeCycleTypeMap("NORMAL", "HALF_YEAR");
        System.out.println(s.getCode());
        System.out.println(s.getDescription());
    }