zoukankan      html  css  js  c++  java
  • 枚举常量化工具

    场景

    在部分场景中会用到一些枚举类,并且到查询数据时,与枚举有对应关系
    比如数据库会出现 字段 "1" 代表"完成" ”0"代表"未完成" 的类似数据
    那从数据库查询出这些数据的时候,数据拿给前端或者导出文件是需要显示原意的,即 未完成 或者 完成,而不是显示 0 或 1

    在后端查出数据库的数据,然后找到对应含义值,是很常见的,
    但是常常写,会有一些问题,不免思考有什么好方法优化一下

    问题

    获取映射值繁琐

    每次查询,都要找到枚举类获取对应值,查询次数多了就显得低效(代码执行总得消耗CPU,这里消耗一些,那里消耗一些,加起来程序运行可能就变慢了)

    可能缺失映射值

    如果数据异常找不到映射值怎么办,或者数据更新枚举类没有更新怎么办(比如 0 1 有代表"未完成" 和 "完成",现在加一个 2 代表 ”进行中" ,但是枚举类没有更新)

    工具类实现

    编写一个工具类解决上面提到的两个问题,使在业务开发中更高效方便

    package com.test;
    
    import java.util.Map;
    
    import java.util.HashMap;
    /**
    * 枚举映射工具类
    * @author narule
    * @version 创建时间:2019年8月22日 下午7:35:57 
    */
    @SuppressWarnings("all")
    public class MappingUtils <K,V> {
    
    	private Map<K,V> map;
    	
    	private MappingUtils(Map<K,V> map){
    		this.map = map;
    	}
    	
    	private MappingUtils(){
    		this.map = new HashMap<K,V>();
    	}
    	
    	/** 
    	*针对缺失映射值的一种设计方案
    	*/
    	public Object get(K key) {
    		Object value;
    		return (value = map.get(key)) != null ? value : key; 
    		//比如在excel 导出时 如果出现 key = 2 没有 对应value, 应该返回 2,不应该返回null,返回null导致表数据缺失
    	}
    	
     	public V put(K key,V value) {
    		return map.put(key, value);
    	} 
    	
    	private Map<K, V> getMap(){
    		return this.map;
    	}
    	/**
    	* 
    	*/
    	private static final long serialVersionUID = 1L;
    
    
    	/**物资种类 MaterialTypeEnum*/
    	public final static MappingUtils<String,String> MATERIAL_TYPE = new MappingUtils();
    	
    	
    	/*
    	*这里是解决获取映射值的繁琐的一种方案,类加载时就将枚举映射关系存入map
    	*/
    	static {
                    // 枚举常量化 - 放入map   后面多次获取映射值时会提高代码效率和简单性
    		MaterialTypeEnum[] materialTypeEnums = MaterialTypeEnum.values();
    		for (MaterialTypeEnum materialTypeEnum : materialTypeEnums) {
    			MATERIAL_TYPE.put(materialTypeEnum.getKey(), materialTypeEnum.getValue());
    		}
    		MATERIAL_TYPE.put(null, "其他"); //针对key为null的处理
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(MATERIAL_TYPE.get("90"));
    		System.out.println(MATERIAL_TYPE.get("1"));
    	}
    
    }
    
  • 相关阅读:
    精通特征工程
    reduce_mem_usage 降低内存使用 绘制学习率曲线和验证曲线
    正态性检验 Python正态性检验
    pd.melt Pandas 的melt的使用
    pandas dataframe 格式设置 set_option
    常用模块
    第9章 列表生成式、生成器和迭代器
    全栈作业(一)
    第8章 装饰器、模块和包
    第7章 Python 函数
  • 原文地址:https://www.cnblogs.com/Narule/p/11423221.html
Copyright © 2011-2022 走看看