JAVA Map内容操作

import org.apache.commons.lang.ObjectUtils;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * Created by xing on 2015/1/30.
 */
public final class MapUtils {

    /**
     * 初始化 IN 查询入参
     * 效果: '0001,0002' 变成 '0001','0002'
     * 结果:在mybatis 拼接SQL IN ('0001','0002')
     * @param params
     * @param key
     */
    public static void initInQuery(Map<String, String> params, String key) {
        String SURVEY_SN  = ObjectUtils.toString(params.get(key));
        if(!SURVEY_SN.isEmpty()){
            if(SURVEY_SN.indexOf(",")!=-1){//多个调查表编号
                String[] surveySnArr = SURVEY_SN.split(",");
                StringBuffer survey_sn_temp = new StringBuffer("");
                for (int i =0;i<surveySnArr.length;i++){
                    if(!surveySnArr[i].isEmpty()){
                        if(i==0){
                            survey_sn_temp=new StringBuffer("'");
                            survey_sn_temp.append(surveySnArr[i]).append("'");
                        }else{
                            survey_sn_temp.append(",'").append(surveySnArr[i]).append("'");
                        }
                    }
                }
                SURVEY_SN = survey_sn_temp.toString();
            }else{//一个调查表编号或者""
                SURVEY_SN = "'"+SURVEY_SN+"'";
            }
            params.put(key,SURVEY_SN);
        }
    }

    /**
     * 检查指定的值是否是数字
     * @param params
     * @param keys
     */
    public static void checkNumParams(Map params,String... keys){
        for (String key : keys) {
            String value = ObjectUtils.toString(params.get(key));
            if(!value.isEmpty()){
                if(!ValidateUtil.isNumber(value)){
                    throw new AtomException(BusinessPrompt.CHECK_NUM_PARAMS_FAIL_CODE, "["+value+"]不是数字。", FrameworkConstants.ATOM_LVL);
                }
            }
        }
    }

    /**
     * 检查Map中指定key对应value中的是否有特殊字符,有特殊字符就报异常
     * @param params
     * @param keys
     * @return
     */
    public static void checkSpecialStrInMap(Map params,String... keys){
        for (String key : keys) {
            String value = ObjectUtils.toString(params.get(key));
            if(isSpecialStr(value)){
                throw new AtomException(BusinessPrompt.CHECK_SPECIAL_STR_IN_MAP_FAIL_CODE, "["+value+"]中有非法特殊字符,请检查。", FrameworkConstants.ATOM_LVL);
            }
        }
    }

    /**
     * 过滤Map中指定key对应value中的特殊字符
     * @param params
     * @param keys
     * @return
     */
    public static Map filterMap(Map params,String... keys){
        Map newMap = new HashMap();
        for (String key : keys) {
            if(params.get(key) == null){
                newMap.put(key, "");
            }else{
                newMap.put(key,filterStr(ObjectUtils.toString(params.get(key))));
            }
        }
        params.putAll(newMap);
        return params;
    }

    /**
     * 是否特殊字符,包含特殊字符返回true,否则返回false
     * @param str
     * @return boolean
     * @throws java.util.regex.PatternSyntaxException
     */
    public static boolean isSpecialStr(String str) throws PatternSyntaxException {
        String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.find();
    }

    /**
     * 过滤特殊字符
     * @param str
     * @return
     * @throws java.util.regex.PatternSyntaxException
     */
    public static String filterStr(String str) throws PatternSyntaxException {
        // 清除掉所有特殊字符
        String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }


    /**
     * 将交换区中的值为NULL的改成空串
     * @param params
     * @param keys
     */
    public static void deleteNull(Map params,String[] keys){
        for (String key : keys) {
            if(params.get(key) == null){
                params.put(key, "");
            }
        }
    }

    /**
     * 将交换区中的值为NULL的改成空串
     * @param params
     * @param keys
     */
    public static void deleteNull2Empty(Map params,String... keys){
        for (String key : keys) {
            if(params.get(key) == null){
                params.put(key, "");
            }
        }
    }

    /**
     * 将其中值为null改成空串
     * @param params
     */
    public static Map deleteNull(Map params){
        List<String> keys = new ArrayList<String>();
        for(Object o:params.keySet()) {
            keys.add(ObjectUtils.toString(o));
        }
        for (String key : keys) {
            if(params.get(key) == null){
                params.put(key, "");
            }
        }
        return params;
    }

    /**
     * 检查入参是否为空
     * @param params 要检查的Map
     * @param keyName 键
     * @param des 异常描述
     * 调用实例:MapUtils.checkParam(params,"CUST_STATUS","客户状态不能为空");
     */
    public static void checkParam(Map<String, String> params,String keyName,String des) {
        if(ObjectUtils.toString(params.get(keyName)).isEmpty()){
            throw new AtomException(BusinessPrompt.CHECK_PARAM_FAIL_CODE, des, FrameworkConstants.ATOM_LVL);
        }
    }

    /**
     * 将Map中的value全部转换成值是String的ConcurrentHashMap
     * @param targetMap
     * @return
     */
    public static Map<String, Object> toStrMap(Map<String, Object> targetMap){
        Map<String, Object> theMap = new ConcurrentHashMap<String, Object>();
        for (Map.Entry<String, Object> e: targetMap.entrySet()) {
            theMap.put(e.getKey(), ObjectUtils.toString(e.getValue()));
        }
        return theMap;
    }

    /**
    * 删除orgMap中键值key在数组keys中的值
    * @param orgMap
    * @param keys
    * */
    public static void removeByKey(Map orgMap, String... keys) {
        if(orgMap != null && keys != null) {
            for(String key : keys) {
                orgMap.remove(key);
            }
        }
    }

   /**
   * 拆分多个查询值(逗号分隔)
   * @param params      入参Map
   * @param key         查询字段代码
   * @param newKey      新的查询字段代码  保留原有字段
   * @param childKey    子Map键值key,对应单个查询值
   * @param key4Flag    多值查询的标识的键值key
   * @param flagVal     多值查询的标识的值value
   * */
    public static void setMultiParams(Map params, String key, String newKey, String childKey, String key4Flag, String flagVal) {
        if(params != null && key != null && newKey != null && childKey != null) {
            if(ObjectUtils.toString(params.get(key)).indexOf(",") != -1) {
                String[] vals = ObjectUtils.toString(params.get(key)).split(",");
                List<Map> qryList = new ArrayList<Map>();
                for(int i = 0, len = vals.length; i < len; i++) {
                    Map childMap = new HashMap();
                    childMap.put(childKey, vals[i].replaceAll("'", ""));
                    qryList.add(childMap);
                }
                params.put(newKey, qryList);
                params.put(key4Flag, flagVal);
            }
        }
    }

    public static boolean isLstContainsMapByKeys(List<Map> mainAgRelLst, Map subAgRelMap, String... keys) {
        if (mainAgRelLst == null || subAgRelMap == null) {
            return false;
        }

        String[] keyAry = keys;
        if (keyAry == null || keyAry.length == 0) {
            return mainAgRelLst.contains(subAgRelMap);
        }

        for (Iterator<Map> iterator = mainAgRelLst.iterator(); iterator.hasNext();) {
            Map mainAgRelMap = iterator.next();
            if (isEqualsMapByKeys(mainAgRelMap, subAgRelMap, keyAry)) {
                return true;
            }
        }
        return false;
    }

    // 判断Map间是否相等,根据指定的键值判断
    private static boolean isEqualsMapByKeys(Map mainAgRelMap, Map subAgRelMap, String[] keyAry) {
        boolean isEquals = true;
        for (int i = 0, len = keyAry.length; i < len; i++) {
            String key = keyAry[i];
            String mainVal = getMapVal(mainAgRelMap, key);
            String subVal = getMapVal(subAgRelMap, key);
            isEquals &= mainVal.equals(subVal);
        }
        return isEquals;
    }

    private static String getMapVal(Map params, String key) {
        return ObjectUtils.toString(params.get(key));
    }

    /**
     * 对params中key设置默认值value
     * @param params
     * @param key
     * @param value
     */
    public static void setDefaultVal(Map params, String key,String value) {
        if(ObjectUtils.toString(params.get(key)).isEmpty()){
            params.put(key,value);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值