• 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());
        }
    

    image

  • 相关阅读:
    RabbitMQ集群
    RabbitMQ (十六) 消息队列的应用场景 (转)
    RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
    RabbitMQ (十四) 普通集群
    RabbitMQ (十三) 集群+单机搭建(window)
    秋招_微盟_一面/二面/HR面
    秋招-腾讯云西子公司-一二面-11/16
    秋招-京东(补录)-面经-一面/二面/HR面
    秋招-腾讯补录-面经-12/10
    投递过程
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/16140639.html
Copyright © 2020-2023  润新知