
com.ajaxjs.keyvalue.MapHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ajaxjs-base Show documentation
Show all versions of ajaxjs-base Show documentation
A pure Java library that provides many tools, utils, and functions.
/**
* Copyright 2015 Sp42 [email protected]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ajaxjs.keyvalue;
import java.util.HashMap;
import java.util.Map;
import com.ajaxjs.util.CommonUtil;
import com.ajaxjs.util.Encode;
/**
* 链式调用处理 map 数据
*
* @author Sp42 [email protected]
*/
public class MapHelper {
/**
* Servlet 返回的数据
*/
private Map parameterMapRaw;
/**
* Map 数据
*/
private Map parameterMap;
/**
* Map 数据
*/
private Map parameterMap_String;
/**
* 剔除不要的字段
*
* @param ignoreField 不要的字段
* @return 返回本实例供链式调用
*/
public MapHelper ignoreField(String ignoreField) {
try {
if (parameterMapRaw.containsKey(ignoreField))
parameterMapRaw.remove(ignoreField);
} catch (IllegalStateException e) {
// 忽略 request.getParameterMap() 原生不能删除的
}
if (parameterMap != null && parameterMap.containsKey(ignoreField))
parameterMap.remove(ignoreField);
if (parameterMap_String != null && parameterMap_String.containsKey(ignoreField))
parameterMap_String.remove(ignoreField);
return this;
}
/**
* String 变为真实的 Java 数据 toDataAsObject().parameterMap();
*
* @return 返回本实例供链式调用
*/
public MapHelper toDataAsObject() {
parameterMap = asObject(getParameterMap_String(), true);
return this;
}
/**
* String[] 转换为 String
*
* @return 返回本实例供链式调用
*/
public MapHelper toMap() {
parameterMap_String = toMap(getParameterMapRaw());
return this;
}
/**
* @return the parameterMapRaw
*/
public Map getParameterMapRaw() {
return parameterMapRaw;
}
/**
*
* @param parameterMapRaw
* @return 返回本实例供链式调用
*/
public MapHelper setParameterMapRaw(Map parameterMapRaw) {
this.parameterMapRaw = parameterMapRaw;
return this;
}
/**
* @return the parameterMap
*/
public Map getParameterMap() {
return parameterMap;
}
/**
*
* @param parameterMap
* @return 返回本实例供链式调用
*/
public MapHelper setParameterMap(Map parameterMap) {
this.parameterMap = parameterMap;
return this;
}
/**
* @return the parameterMap_String
*/
public Map getParameterMap_String() {
return parameterMap_String;
}
/**
*
* @param parameterMap_String
* @return 返回本实例供链式调用
*/
public MapHelper setParameterMap_String(Map parameterMap_String) {
this.parameterMap_String = parameterMap_String;
return this;
}
//////////////// 静态方法 ////////////////
/**
* 也是 join,不过输入的参数不是数组而是 hash。
*
* @param map 输入的 map
* @param div 分隔符
* @return 连续的字符串
*/
public static String join(Map map, String div) {
String[] pairs = new String[map.size()];
int i = 0;
for (String key : map.keySet())
pairs[i++] = key + "=" + map.get(key);
return String.join(div, pairs);
}
/**
* Map 转换为字符串,默认 & 作为分隔符
*
* @param map 输入的 map
* @return 连续的字符串
*/
public static String join(Map map) {
return join(map, "&");
}
/**
* Map 的泛型类型转换,从 Map 转换为 Map
*
* @param map Map 结构
* @return Map 结构
*/
public static Map asString(Map map) {
if (map == null)
return null;
Map as = new HashMap<>();
for (String key : map.keySet())
as.put(key, map.get(key) == null ? null : map.get(key).toString());
return as;
}
/**
* Map 的泛型类型转换,转换为 Map。 可选择类型转换真实值,如
* "2"-->2,"true",-->true,"null"-->null。要求 String 类型才可以 CastRealValue TODO
* 这个是否需要要求这样?
*
* @param map
* @param isCastRealValue true 表示为转换类型
* @return Map 结构
*/
public static Map asObject(Map map, boolean isCastRealValue) {
if (map == null)
return null;
Map as = new HashMap<>();
for (String key : map.keySet()) {
Object obj = map.get(key);
boolean toCast = isCastRealValue && obj != null && obj instanceof String;
as.put(key, toCast ? MappingValue.toJavaValue(obj.toString()) : obj);
}
return as;
}
/**
* Map 的泛型类型转换,从 Map 转换为 Map
*
* @param map Map 结构
* @return Map 结构
*/
public static Map asObject(Map map) {
return asObject(map, false);
}
/**
* Map 转换为 Map,其中 value[] 变成 , 分割的单个字符串。
*
* @param map 输入的 Map
* @return 以 , 分割的单个字符串
*/
public static Map toMap(Map map) {
if (map == null)
return null;
Map _map = new HashMap<>();
for (String key : map.keySet()) {
String[] values = map.get(key);
String value = values.length == 1 ? values[0] : String.join(",", values);
_map.put(key, value);
}
return _map;
}
/**
* 数据结构的简单转换 String[]-->Map
*
* @param columns 结对的键数组
* @param values 结对的值数组
* @return Map 结构
*/
public static Map toMap(String[] columns, String[] values) {
if (CommonUtil.isNull(columns))
return null;
if (columns.length != values.length)
throw new UnsupportedOperationException("两个数组 size 不一样");
Map map = new HashMap<>();
int i = 0;
for (String column : columns)
map.put(column, MappingValue.toJavaValue(values[i++]));
return map;
}
/**
* 数据结构的简单转换 String[]-->Map
*
* @param pairs 结对的字符串数组
* @return Map 结构
*/
public static Map toMap(String[] pairs) {
return toMap(pairs, false);
}
/**
* 数据结构的简单转换 String[]-->Map
*
* @param pairs 结对的字符串数组
* @param isDecode 是否 url 解码
* @return Map 结构
*/
public static Map toMap(String[] pairs, boolean isDecode) {
if (CommonUtil.isNull(pairs))
return null;
Map map = new HashMap<>();
for (String pair : pairs) {
if (!pair.contains("="))
throw new IllegalArgumentException("没有 = 不能转化为 map");
String[] column = pair.split("=");
if (column.length >= 2)
map.put(column[0], MappingValue.toJavaValue((isDecode ? Encode.urlDecode(column[1]) : column[1])));
else
map.put(column[0], "");// 没有 等号后面的,那设为空字符串
}
return map;
}
/**
* 有些对象实现了 Map 接口但只能读不能写,现在为真正的 Hashmap
*
* @param map 符合 Map 接口的伪 Map
* @return 真正的 Hashmap
*/
public static Map toRealMap(Map map) {
if (map == null)
return null;
Map _map = new HashMap<>();
for (String key : map.keySet())
_map.put(key, map.get(key));
return _map;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy