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);
}
}
}
JAVA Map内容操作
最新推荐文章于 2023-06-16 19:36:45 发布