All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.hugh.util.MapUtils Maven / Gradle / Ivy

The newest version!
package com.github.hugh.util;

import com.github.hugh.exception.ToolboxException;
import com.github.hugh.util.common.AssertUtils;
import com.google.common.base.Splitter;

import javax.servlet.http.HttpServletRequest;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

/**
 * Map 工具类
 * 
    *
  • 该类获取map中的值使用了{@link org.apache.commons.collections4.MapUtils}进行二次封装
  • *
* * @author hugh * @since 1.0.2 */ public class MapUtils { /** * 校验map中code状态是否为0000(成功状态) * * @param map Map * @param key map中的key * @param code 需要验证的code码 * @return boolean {@code true} 一致 */ public static boolean isSuccess(Map map, K key, String code) { if (map == null) { return false; } if (EmptyUtils.isEmpty(code)) { return false; } return code.equals(String.valueOf(map.get(key))); } /** * 根据key与code码、校验与map中一致 * * @param map 参数 * @param key 键 * @param code 值 * @return boolean {@code true} 不一致 */ public static boolean isFailure(Map map, K key, String code) { return !isSuccess(map, key, code); } /** * 校验map是否为空 * * @param map 参数 * @return boolean {@code true} 空 */ public static boolean isEmpty(Map map) { return map == null || map.size() == 0; } /** * 校验Map不为空 * * @param map 参数 * @return boolean {@code true} 不为空 */ public static boolean isNotEmpty(Map map) { return !isEmpty(map); } /** * 循环所有request中的参数放入至map * * @param request 客户端的请求 * @return Map * @since 1.1.0 */ public static Map cyclePar(HttpServletRequest request) { Map map = new HashMap<>(); if (request == null) { return map; } Enumeration isKey = request.getParameterNames(); while (isKey.hasMoreElements()) { String key = isKey.nextElement(); String value = request.getParameter(key); map.put(key, value); } return map; } /** * 遍历查询参数 *
    *
  • 并且移除其中的page、size键
  • *
* * @param request 客户端的请求 * @return Map * @since 1.1.0 */ public static Map cycleQueryPar(HttpServletRequest request) { return cycleQueryPar(request, "page", "size"); } /** * 遍历查询参数、并且移除其中指定多余键 * * @param request 客户端的请求 * @param keys 需要删除的key * @return Map * @since 1.1.0 */ public static Map cycleQueryPar(HttpServletRequest request, String... keys) { Map map = cyclePar(request); for (String key : keys) { map.remove(key); } return map; } /** * 将map,转换成对应class对象的实体类 *
    *
  • 注:
  • *
  • 1.map中的key必须与实体中的常量key一致.
  • *
  • 2.通过class创建一个新的实例,后调用{@link #convertObjects(Object, Map, boolean)}赋值.
  • *
  • 3.调用{@link EmptyUtils#isNotEmpty(Object)}字符串非空判断,如果字符串为空则不进行实体赋值.转换方式与{@link #convertObjects(Object, Map, boolean)}.
  • *
* * @param cls 实体类class * @param params 参数 * @param 类型 * @param 键泛型 * @param value泛型 * @return T 返回实体 * @throws Exception 错误异常 * @since 1.2.3 */ public static T toEntityNotEmpty(Class cls, Map params) throws Exception { AssertUtils.notNull(cls, "class"); T obj = cls.getDeclaredConstructor().newInstance(); return convertObjects(obj, params, true); } /** * map转换为实体对象,并赋值 *
    *
  • 注:
  • *
  • 1.map中的key必须与实体中的常量key一致.
  • *
  • 2.调用{@link EmptyUtils#isNotEmpty(Object)}字符串非空判断,如果字符串为空则不进行实体赋值.转换方式与{@link #convertObjects(Object, Map, boolean)}.
  • *
* * @param object 实体对象 * @param params 参数 * @since 1.4.0 */ public static T toEntityNotEmpty(T object, Map params) throws Exception { AssertUtils.notNull(object, "object"); return convertObjects(object, params, true); } /** * 将map,转换成对应class对象的实体类 *
    *
  • 注:
  • *
  • 1.map中的key必须与实体中的常量key一致.
  • *
  • 2.class创建一个新的实例,通过反射机制调用对象方法,获取map中的value不为{@code null}时进行赋值.
  • *
  • 3.转换方式与{@link #convertObjects(Object, Map, boolean)}.
  • *
* * @param cls 类 * @param params 参数 * @param 实体泛型 * @param map中key * @param map-value * @return T 实体 * @throws Exception 错误信息 * @since 1.4.0 */ public static T convertEntity(Class cls, Map params) throws Exception { AssertUtils.notNull(cls, "class"); T obj = cls.getDeclaredConstructor().newInstance(); return convertObjects(obj, params, false); } /** * Map转实体类方法 *
    *
  • 注:
  • *
  • 1.map中的key必须与实体中的常量key一致.
  • *
  • 2.不会新创建实体对象,通过反射机制调用对象方法,获取map中的value不为{@code null}时进行赋值
  • *
  • 3.转换方式与{@link #convertObjects(Object, Map, boolean)}
  • *
* * @param object 实体 * @param params 参数 * @param 实体泛型 * @param map中key * @param map-value * @return T 实体 * @throws Exception 错误信息 * @since 1.4.0 */ public static T convertEntity(T object, Map params) throws Exception { AssertUtils.notNull(object, "object"); return convertObjects(object, params, false); } /** * map转实体 * * @param bean 实体 * @param params 参数 * @param empty 空判断 * @param 实体泛型 * @return T 实体 * @throws IntrospectionException 无法将字符串类名称映射到 Class 对象、无法解析字符串方法名,或者指定对其用途而言具有错误类型签名的方法名称 * @throws InvocationTargetException 反射异常 * @throws IllegalAccessException 没有访问权限的异常 * @since 1.4.0 */ private static T convertObjects(T bean, Map params, boolean empty) throws IntrospectionException, InvocationTargetException, IllegalAccessException { Class aClass = bean.getClass(); BeanInfo beanInfo = Introspector.getBeanInfo(aClass); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor descriptor : propertyDescriptors) { String propertyName = descriptor.getName(); Object value = params.get(propertyName); boolean flag; // 是否空判断标识 if (empty) { // 判断不等于空字符串 flag = EmptyUtils.isNotEmpty(value); } else { // 判断不等于null flag = value != null; } if (flag) { switch (descriptor.getPropertyType().getSimpleName()) { case "String": break; case "int": case "Integer": value = Integer.parseInt(String.valueOf(value).strip()); break; case "long": case "Long": value = Long.parseLong(String.valueOf(value)); break; case "double": case "Double": value = Double.parseDouble(String.valueOf(value)); break; case "Date": // 当时日期类型时,进行格式校验 if (value instanceof Date) { //日期类型不处理 } else if (DateUtils.isDateFormat(String.valueOf(value))) { value = DateUtils.parse(String.valueOf(value)); } break; case "List": String trim = trim(String.valueOf(value)); value = Splitter.on(",").trimResults().splitToList(trim); break; default: throw new ToolboxException("Unknown type : " + descriptor.getPropertyType().getSimpleName()); } descriptor.getWriteMethod().invoke(bean, value); } } return bean; } /** * 修剪掉前后各一位字符 * * @param source 源 * @return String */ private static String trim(String source) { if (EmptyUtils.isEmpty(source)) { return ""; } String s1 = source.substring(1); return s1.substring(0, s1.length() - 1); } /** * get参数后转换为String * * @param key 的类型 * @param map 参数 * @param key 键 * @return String */ public static String getString(Map map, K key) { return org.apache.commons.collections4.MapUtils.getString(map, key); } /** * get参数后转换为Long * * @param key 的类型 * @param map 参数 * @param key 键 * @return Long */ public static Long getLong(Map map, K key) { return org.apache.commons.collections4.MapUtils.getLong(map, key); } /** * get参数后转换为Int * * @param key 的类型 * @param map 参数 * @param key 键 * @return Integer */ public static Integer getInt(Map map, K key) { return org.apache.commons.collections4.MapUtils.getInteger(map, key); } /** * get参数后转换为Double * * @param key 的类型 * @param map 参数 * @param key 键 * @return Double */ public static Double getDouble(Map map, K key) { return org.apache.commons.collections4.MapUtils.getDouble(map, key); } /** * get参数后转换为Map * * @param key 的类型 * @param map 参数 * @param key 键 * @return Map */ public static Map getMap(Map map, K key) { return org.apache.commons.collections4.MapUtils.getMap(map, key); } /** * 为map put值 *

如果key或value为空时则不put

* * @param map map * @param key key * @param value value * @param the key type * @param the value type * @since 1.7.3 */ public static void setValue(final Map map, final K key, final V value) { if (map == null) { return; } if (EmptyUtils.isEmpty(key) || EmptyUtils.isEmpty(value)) { return; } map.put(key, value); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy