package com.lee;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
public final class MapUtil {
public static void addStringToMap(Map<String, Object> map, String key, String value) {
if (StringUtils.isNotBlank(value)) {
map.put(key, value);
}
}
public static void addValueToMap(Map<String, Object> map, String key, Object value) {
if (value != null) {
map.put(key, value);
}
}
public static Double getDoubleValue(Map<String, Object> map, String key) {
BigDecimal decimal = getMapValue(map, key, BigDecimal.class);
return decimal == null ? null : decimal.doubleValue();
}
public static Date getDateValue(Map<String, Object> map, String key) {
return getMapValue(map, key, Date.class);
}
public static Integer getIntegerValue(Map<String, Object> map, String key) {
return getMapValue(map, key, Integer.class);
}
public static String getStringValue(Map<String, Object> map, String key) {
return getMapValue(map, key, String.class);
}
public static <T> T getMapValue(Map<String, Object> map, String key, Class<T> clazz) {
Object value = map.get(key);
if (value == null) {
return null;
}
return clazz.cast(value);
}
public static Object getMapValueWithDefault(Map<String, Object> data, String key, Object defaultVal) {
Object value = data.get(key);
if (value == null || StringUtils.isBlank(value.toString())) {
return defaultVal;
}
return value;
}
public static Map<String, String> describeObject(Object object) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Map<String,String> map = new HashMap<String,String>();
BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
if (propertyDescriptors != null && propertyDescriptors.length > 0) {
String propertyName = null; // object属性名
Object propertyValue = null; // object属性值
for (PropertyDescriptor pd : propertyDescriptors) {
propertyName = pd.getName();
if (!propertyName.equals("class")) {
Method readMethod = pd.getReadMethod();
propertyValue = readMethod.invoke(object, new Object[0]);
map.put(propertyName.toString(), propertyValue.toString());
}
}
}
return map;
}
}