HashMap应用

来源:互联网 发布:js 屏幕手写板 编辑:程序博客网 时间:2024/06/02 05:15


之前遇到一个替换银行名称的需求,就是客户传过来的是银行简称,但是我们的系统里面 是将所有的银行存放在一个HashMap里面的,如下:

        

import java.util.HashMap;import java.util.Map;public  class ConstantBank {public static Map<String, String> getBankName(){Map<String,String> bankMap =new HashMap<String, String>();bankMap.put("中国邮政储蓄银行" ,"中国邮政储蓄银行");bankMap.put("中国工商银行" ,"中国工商银行");bankMap.put("中国农业银行" ,"中国农业银行");bankMap.put("中国银行" ,"中国银行");bankMap.put("中国建设银行" ,"中国建设银行");bankMap.put("国家开发银行" ,"国家开发银行");bankMap.put("中国农业发展银行" ,"中国农业发展银行");...bankMap.put("...." ,"....");...bankMap.put("交通银行" ,"交通银行");return bankMap;}}
客户那边传过来的银行,比如中国建设银行,客户那边给我的是建行,比如中国农业发展银行,客户给我的是农发行。所以进入我们系统做判断的时候就不能跟我们的银行名称

匹配,所以导致业务不能顺利进行。所以就要将这些不规则的银行名称进行处理。

刚开始的时候只有两个银行是用的简称,所以就想着在类里面写个替换方法直接写死,但是如果所有的银行都用简称的话,每一个银行都需要判断,所以就想着用配置文件的形式进行处理,就是将需要替换的银行名称在配置文件中设置好,读取配置文件进行替换就行了,不用添加一个银行就去修改一次类。处理的方法如下:

首先是读取配置文件的方法:

/** * 获取业务配置信息 * @param param * @return */public static String getBusiProperties(String param) {String property = "";Properties prop = new Properties();InputStream in = null;try {in = new BufferedInputStream(new FileInputStream("/apps/config/xxxx/xxxx/busiConfig.properties"));prop.load(in);property = prop.getProperty(param);} catch (IOException e) {e.printStackTrace();}return property;}


然后是constant常量:
/** 银行简称**/public static String WELAB_BANK_VALID_OLD = "welab.oldbank.valid";/** 银行全称**/public static String WELAB_BANK_VALID_NEW = "welab.newbank.valid";

本地配置文件busiConfig.properties:

#productCodewelab.oldbank.valid=\u5149\u5927\u94F6\u884C,\u6D66\u53D1\u94F6\u884Cwelab.newbank.valid=\u4E2D\u56FD\u5149\u5927\u94F6\u884C,\u4E0A\u6D77\u6D66\u4E1C\u53D1\u5C55\u94F6\u884C

下面是处理的类:

package com.huateng.xxxx.xxxx.service.constant;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import com.huateng.iccs.utils.CommonUtil;public class CorrectBankName {public static Map<String, String> getBankName(){/** * 将名称不规范的银行配置到busiConfig.properties文件 * 读取配置文件,将不规范名称作为key放入map,将正确银行名称作为value放入map */Map<String,String> bankMap =new HashMap<String, String>();String[] oldMap = CommonUtil.getBusiProperties(Constant.WELAB_BANK_VALID_OLD).split(",");String[] newMap = CommonUtil.getBusiProperties(Constant.WELAB_BANK_VALID_NEW).split(",");for(int i = 0;i<oldMap.length;i++){bankMap.put(oldMap[i] ,newMap[i]);}return bankMap;}/** * 如果传入的银行名称与配置文件读出的一致就将正确的银行名称返回 * @param old * @return */public static String parseName(String old){Map<String, String> map = getBankName();String newName = null;for(Entry<String, String> vo : map.entrySet()){             if(vo.getKey().equals(old)){            newName = vo.getValue();             } }return newName;}}
最后是方法调用:

//验证银行名称是否在允许放款的名称内if((ConstantBank.getBankName().get(load.getOpenBankName()) == null) &&(CorrectBankName.getBankName().get(load.getOpenBankName()) == null)){//修改代发状态为失败//TODO//发送邮件//TODO}else{//TODO 如果客户传过来的是银行简称,将银行全称赋值给对象if(CorrectBankName.getBankName().get(load.getOpenBankName()) != null){paySend.setBankName(CorrectBankName.parseName(load.getOpenBankName()));}else{paySend.setBankName(load.getOpenBankName());}//TODO}


重点不是怎么实现的,重点在于HashMap的使用,我在配置文件中将 银行简称放在 welab.oldbank.valid 中用逗号隔开,将银行全称 放在welab.newbank.valid中用逗号隔开,

在读取配置文件的时候,利用HashMap的 key存放银行简称,利用HashMap的value存放银行全称,这样一一替换,以后还有银行简称的时候将这些银行在配置文件中配置一下就行了。


原创粉丝点击