还在写if?试试枚举策略

简介: 日常开发中或者代码优化过程中,一定会遇到不少的if语句,如果判断逻辑多了,会导致代码极其冗余,阅读性也会大打折扣,"消灭"if语句的方式有很多,也分不同的场景,本文将使用枚举策略的方式优化繁琐的if语句,你可以参考下文。

前言

image (1).png
日常开发中或者代码优化过程中,一定会遇到不少的if语句,如果判断逻辑多了,会导致代码极其冗余,阅读性也会大打折扣,"消灭"if语句的方式有很多,也分不同的场景,本文将使用枚举策略的方式优化繁琐的if语句,你可以参考下文。

Example

package org.example.strategy;

import java.util.HashMap;

/**
 * @author Duansg
 * @date 2022-11-22 11:19 上午
 */
public class Example {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {

        final HashMap<String, Long> carsMap = new HashMap<String, Long>() {
            {
                put(CarContant.BMW, 100000L);
                put(CarContant.BENZ, 88888L);
                put(CarContant.AUDI, 77777L);
            }
        };

        if (carsMap.containsKey(CarContant.BMW)) {
            System.out.printf("这是一辆宝马, 价格:%s%n", carsMap.get(CarContant.BMW));
        }

        if (carsMap.containsKey(CarContant.BENZ)) {
            System.out.printf("这是一辆奔驰, 价格:%s%n", carsMap.get(CarContant.BENZ));
        }
        if (carsMap.containsKey(CarContant.AUDI)) {
            System.out.printf("这是一辆奥迪, 价格:%s%n", carsMap.get(CarContant.AUDI));
        }

    }

    /**
     *
     */
    public static class CarContant {

        public static final String BMW = "BMW";

        public static final String BENZ = "BENZ";

        public static final String AUDI = "AUDI";
    }
}

StrategyExample

package org.example.strategy;

import java.util.Objects;
import java.util.stream.Stream;

/**
 * @author Duansg
 * @date 2022-11-22 11:24 上午
 */
public enum StrategyExample {

     /**
     *
     * @param args
     */
    public static void main(String[] args) {

        final HashMap<String, Long> carsMap = new HashMap<String, Long>() {
            {
                put(CarContant.BMW, 100000L);
                put(CarContant.BENZ, 88888L);
                put(CarContant.AUDI, 77777L);
            }
        };

        carsMap.forEach(StrategyExample::format);
    }

    /**
     *
     */
    BMW(Example.CarContant.BMW) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆宝马, 价格:%s%n", price);
        }
    },

    BENZ(Example.CarContant.BENZ) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆奔驰, 价格:%s%n", price);
        }
    },

    AUDI(Example.CarContant.AUDI) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆奥迪, 价格:%s%n", price);
        }
    };

    /**
     * 汽车名称
     */
    private String carName;

    /**
     * 格式化方法
     *
     * @param carName
     * @param price
     */
    public static void format(String carName, Long price) {

        if (Objects.isNull(carName)) {
            return;
        }

        final StrategyExample strategyExample = Stream.of(StrategyExample.values())
                .filter(strategy -> strategy.getCarName().equals(carName))
                .findFirst()
                .orElse(null);

        if (Objects.isNull(strategyExample)) {
            return;
        }

        strategyExample.print(price);
    }

    /**
     * 打印方法
     *
     * @param price
     */
    public abstract void print(Long price);

    /**
     *
     * @param carName
     */
    StrategyExample(String carName) {
        this.carName = carName;
    }

    /**
     *
     * @return
     */
    public String getCarName() {
        return carName;
    }
}
目录
相关文章
|
4天前
|
缓存 自然语言处理 Java
还在为字典值、枚举值校验烦恼吗,不妨试试这个
本文介绍了如何在Java中实现常量值校验的封装,主要包括两个方面:字典值类型的校验和枚举类型的校验。首先,作者提到在进行数据验证时,实体类字段需要添加`@Valid`注解。然后,对于字典值类型的校验,可以通过`@DictVaild`注解检查当前字段值是否在数据库中的字典值类别内,或者与预定义的枚举类中的值相匹配。在进行校验时,可以设置`dictType`参数为`DictType.CODE`或`DictType.LABEL`来分别验证代码值或标签值。
41 0
|
5月前
枚举的使用和注意事项
枚举的使用和注意事项
22 0
|
8月前
巧用枚举替代if
巧用枚举替代if
|
消息中间件 JavaScript 小程序
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
枚举是C语言常见的一种基本数据类型,它可以避免多个整数定义的麻烦,使代码整洁干净易读如此一看,就觉得繁琐无比,大量重复#define xx明显增加代码量,且数值需自己一一对应而枚举,可以解决这种定义连续数值的过程当变量第一个值未自定义时,第一个枚举成员的默认值则为整型0,后续成员值依次加1,如此时MON=0,TUE=1,WED=2·····.........
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
|
存储 监控 前端开发
行动策略过于复杂怎么办?试试下面一些解决方法
随着使用SLS告警越来越深入,有些用户的行动策略会配置的特别复杂,有些时候可以让用户通过创建多个行动策略来进行一定的精简,但是在一些场景下,用户是无法创建多个行动策略的。
211 0
行动策略过于复杂怎么办?试试下面一些解决方法
|
索引
jmu-枚举WeekDay(补全代码) (5 分)
jmu-枚举WeekDay(补全代码) (5 分)
96 0
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节
60 0
|
Go 开发者
for 循环注意事项和细节(2)| 学习笔记
快速学习 for 循环注意事项和细节(2)
108 0
for 循环注意事项和细节(2)| 学习笔记
|
Go 开发者
for 循环注意事项和细节(1)| 学习笔记
快速学习 for 循环注意事项和细节(1)
205 0
for 循环注意事项和细节(1)| 学习笔记