Java优化if-else代码的实战记录

目录
  • 前言
  • 方案一: 数组
  • 方案二:HashMap
    • 由 key 获取 value
    • 由 value 获取 key
  • 解决方案三:枚举
  • 总结

前言

开发系统一些状态,比如订单状态:数据库存储是数字或字母,但是需要显示中文或英文,一般用到if-else代码判断,但这种判断可读性比较差,也会影响后期维护,也比较容易出现bug。比如:

假设状态对应关系:1:agree 2:refuse 3:finish

int status;
String statusStr = null;
if (status == 1) {
   status = "agree";
} else if (status == 2) {
   status = "refuse";
}else if(status == 3) {
    status = “finish”;
}

方案一: 数组

这种仅限通过数字获取到字母或者中文。

首先设置数组

String[] statusArray = {"","agree","refuse","finish"};

通过数组的位置获取数组的值

int status;
String statusStr =  statusArray[status];
  • 优点: 占用内存少
  • 缺点: 状态值只能是数字,而且还需要考虑数组越界情况

方案二:HashMap

创建和添加map:

    private static final Map<Integer,String> map = new HashMap<>();

    static {
        map.put(1,"agree");
        map.put(2,"refuse");
        map.put(3,"finish");
    }

这种有两种求解方式,通过 key 获取 value 以及通过 value 获取 key,

由 key 获取 value

直接使用 get 方法即可。这里的key相对于数组解法,不限制 key 的类型。

int status;
map.get(status);

由 value 获取 key

使用map遍历:

int status;
for(Map.Entry<Integer, String> vo : map.entrySet()){
     if (vo.getValue().equals(result)) {
           status = vo.getKey();
           break;
      }
}
  • 优点:状态值不限制数字
  • 缺点:占用空间大

解决方案三:枚举

先定义一个枚举类

public enum TestEum {

    agree(1,"agree"),
    refuse(2,"refuse");

    private int code;

    private String capation;

    TestEum(int code,String capation){
        this.code = code;
        this.capation = capation;
    }

    public int getCode() {
        return code;
    }

   public String getCapation() {
        return capation;
   }

   String of(int code){
        for (TestEum testEum : TestEum.values()) {
            if (testEum.getCode() == code) {
                return testEum.getCapation();
            }
        }
        return null;
    }
}

有了枚举以后,if-else 代码块可以优化成一行代码

String statusStr = TestEum.of(status);

总结

  1. 如果通过数字获取描述,使用数组即可。
  2. 如果通过描述获取数字,使用枚举和HashMap都可以。

到此这篇关于Java优化if-else代码的文章就介绍到这了,更多相关Java优化if-else代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈Java编程之if-else的优化技巧总结

    一.使用策略枚举来优化if-else 看到网上蛮多人推荐使用策略模式来优化if-else,但我总觉得,搞一堆策略类来优化大批量if-else,虽然想法很好,但无意之中很可能又会创造出很多类对象,就显得过于繁重了.若想使用策略模式来优化大批量if-else,其实有一种更好的方式,这是策略模式+枚举方式的改良 二.使用三目运算符来优化if-else 1.根据if-else条件来判断赋值的,如: String id=""; if(flag){ id="a"; }else{

  • Java编程技巧:if-else优化实践总结归纳

    目录 一.使用策略枚举来优化if-else 二.使用三目运算符来优化if-else 1.根据if-else条件来判断赋值的,如: 2.利用if-else条件来判断调用方法,如: 三.使用Stream优化if中判断条件过多情况 四.使用Map优化if-else 五.使用枚举优化if-else 六.使用Optional类优化if-else 总结 一.使用策略枚举来优化if-else 看到网上蛮多人推荐使用策略模式来优化if-else,但我总觉得,搞一堆策略类来优化大批量if-else,虽然想法很好,

  • 看完这篇文章获得一些java if优化技巧

    目录 1.if 合并 2.将正常的流程放在函数的主干执行 3.减少if 1. 使用三元运算符表达式 2.使用java8 中流过滤filter ,不使用if 3.使用枚举 4.使用manager 5.使用Consumer 总结: 1.if 合并 使用逻辑运算符进行合并if.简单的if 嵌套可以使用&& 进行合并.简单的if else 并且操作相同可以使用 || 进行合并,优化代码逻辑,增加可读性. 注意:逻辑运算符的截断性,if(a >= 10 || b >= 20) 当a>

  • Java利用策略模式优化过多if else代码

    前言 不出意外,这应该是年前最后一次分享,本次来一点实际开发中会用到的小技巧. 比如平时大家是否都会写类似这样的代码: if(a){ //dosomething }else if(b){ //doshomething }else if(c){ //doshomething } else{ ////doshomething } 条件少还好,一旦 else if 过多这里的逻辑将会比较混乱,并很容易出错. 比如这样: 摘自cim中的一个客户端命令的判断条件. 刚开始条件较少,也就没管那么多直接写的:

  • Java优化if-else代码的实战记录

    目录 前言 方案一: 数组 方案二:HashMap 由 key 获取 value 由 value 获取 key 解决方案三:枚举 总结 前言 开发系统一些状态,比如订单状态:数据库存储是数字或字母,但是需要显示中文或英文,一般用到if-else代码判断,但这种判断可读性比较差,也会影响后期维护,也比较容易出现bug.比如: 假设状态对应关系:1:agree 2:refuse 3:finish int status; String statusStr = null; if (status == 1

  • java对接支付宝支付项目的实战记录

    目录 java对接支付宝支付演示 成功演示图 讲解一下实际支付的时候所需要的参数吧 总结 java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> <dependency> <groupId>com.alipay.sdk</groupI

  • Java切割字符串的踩坑实战记录

    目录 坑出现的环境 问题的解决 补充:java分割字符串常见语法 一.java.lang.String.split() 二.java.util.StringTokenizer() 总结 坑出现的环境 一般情况下切割字符串会使用split或者StringTokenizer,如下代码 String s = ",,o,,"; String[] split = s.split(","); 期望得到数组["","","o&qu

  • MySQL深分页问题解决的实战记录

    目录 前言 limit深分页为什么会变慢? 通过子查询优化 回顾B+ 树结构 把条件转移到主键索引树 INNER JOIN 延迟关联 标签记录法 使用between...and... 手把手实战案例 一般思路的实现方式 实战优化方案 总结 前言 我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下.本文将分4个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例. limit深分页为什么会变慢? 先看下表结构哈: CREAT

  • SpringBoot实战记录之数据访问

    目录 前言 SpringBoot整合MyBatis 环境搭建 注解方式整合mybatis 使用xml配置Mybatis 整合Redis 接口整合 测试 总结 前言 在开发中我们通常会对数据库的数据进行操作,SpringBoot对关系性和非关系型数据库的访问操作都提供了非常好的整合支持.SpringData是spring提供的一个用于简化数据库访问.支持云服务的开源框架.它是一个伞状项目,包含大量关系型和非关系型数据库数据访问解决方案,让我们快速简单的使用各种数据访问技术,springboot默认

  • Go使用proto3的踩坑实战记录

    开发环境:windows10,golang1.18.2,goland2022.2 最近在写项目时,一些数据类的结构以protobuf文件给定.因此,需要将这些protobuf文件转换为golang代码. 首先,在下载解析protobuf的包的时候就碰到了第一个问题... go get -u github.com/golang/protobuf/protoc-gen-go 在我用上述命令后,终端提示该包已弃用 go: module github.com/golang/protobuf is dep

  • Java算法之堆排序代码示例

    堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大.前一种称为最小堆,后一种称为最大堆. 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序.想要用堆排序首先要创建一个堆,如果对4 3 6 2 7 1 5这七个数字做从小到大排序,需要用这七个数创建一个最大堆,来看代码: public class HeapSort { private int[] numbers; private int length; public HeapSor

  • javascript中实现兼容JAVA的hashCode算法代码分享

    在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和java的hashCode计算结果一样. 对于java的hashCode,以前到现在也一直没有了解过其算法,不过猜想应该也不会太难,于是现在java中写了这段代码进行测试: 运行结果:899755 按下Ctrl键点击hashCode方法名跟进去看了下其算法,发现是很简单的几句代码,如下所示: 复制代码 代码如下: public int hashCode() {

  • java 中JDBC连接数据库代码和步骤详解及实例代码

    java 中JDBC连接数据库代码和步骤详解 JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤:  1.加载JDBC驱动程序:  在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(Class

  • Java实现从数据库导出大量数据记录并保存到文件的方法

    本文实例讲述了Java实现从数据库导出大量数据记录并保存到文件的方法.分享给大家供大家参考,具体如下: 数据库脚本: -- Table "t_test" DDL CREATE TABLE `t_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `createTime` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=I

随机推荐