wg-basic/basic-util/src/main/java/ink/wgink/util/map/HashMapUtil.java

327 lines
11 KiB
Java
Raw Normal View History

2021-01-24 21:21:46 +08:00
package ink.wgink.util.map;
import ink.wgink.util.date.DateUtil;
import ink.wgink.util.string.WStringUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import javax.servlet.http.HttpServletRequest;
import java.beans.BeanInfo;
2021-01-28 12:13:15 +08:00
import java.beans.IntrospectionException;
2021-01-24 21:21:46 +08:00
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.*;
import java.util.Map.Entry;
/**
* @author wenc
* @className hashMap 工具类
* @description hashMap 工具类
* @date 2018年2月2日 下午4:59:38
*/
public class HashMapUtil {
/**
* 请求参数转Map
*
* @param request
* @return
*/
public static Map<String, Object> requestParamsToMap(HttpServletRequest request) {
Enumeration<String> requestNames = request.getParameterNames();
2021-01-28 12:13:15 +08:00
Map<String, Object> params = new HashMap<>(0);
2021-01-24 21:21:46 +08:00
while (requestNames.hasMoreElements()) {
String name = requestNames.nextElement();
String value = request.getParameter(name);
if (value.isEmpty()) {
continue;
}
params.put(name, value);
}
return params;
}
/**
* 类转Map
*
* @param object
* @return
*/
public static Map<String, Object> objectToMap(Object object) {
Map<String, Object> result = null;
if (object instanceof Map) {
result = mapObjToMap(object);
} else {
try {
result = beanToMap(object);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 类转Map<String,String>
*
* @param object
* @return
*/
public static Map<String, String> objectToMapString(Object object) {
Map<String, String> result = null;
if (object instanceof Map) {
result = mapObjToMapString(object);
} else {
try {
result = beanToMapString(object);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* map转map<String, String>
*
* @param object
* @return
*/
private static Map<String, String> mapObjToMapString(Object object) {
2021-01-28 12:13:15 +08:00
Map<String, String> result = new HashMap<>(0);
2021-01-24 21:21:46 +08:00
Map<?, ?> map = (Map<?, ?>) object;
for (Entry<?, ?> entry : map.entrySet()) {
String key = entry.getKey().toString();
Object value = entry.getValue();
result.put(key, value.toString());
}
return result;
}
/**
* map转map
*
* @param object
* @return
*/
public static Map<String, Object> mapObjToMap(Object object) {
2021-01-28 12:13:15 +08:00
Map<String, Object> result = new HashMap<>(0);
2021-01-24 21:21:46 +08:00
Map<?, ?> map = (Map<?, ?>) object;
for (Entry<?, ?> entry : map.entrySet()) {
String key = entry.getKey().toString();
Object value = entry.getValue();
result.put(key, value);
}
return result;
}
/**
* bean转map
*
* @param object
* @return
* @throws Exception
*/
2021-01-28 12:13:15 +08:00
public static Map<String, Object> beanToMap(Object object) {
try {
Map<String, Object> result = null;
BeanInfo beanInfo = null;
beanInfo = Introspector.getBeanInfo(object.getClass());
PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : properties) {
if (null == result) {
result = new HashMap<>(0);
}
Method method = property.getReadMethod();
String name = property.getName();
if ("class".equals(name)) {
continue;
}
result.put(name, method.invoke(object));
2021-01-24 21:21:46 +08:00
}
2021-01-28 12:13:15 +08:00
return result;
} catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
throw new TypeConversionException(e.getMessage(), e);
2021-01-24 21:21:46 +08:00
}
}
/**
* bean转Map<String, String>
*
* @param object
* @return
* @throws Exception
*/
2021-01-28 12:13:15 +08:00
public static Map<String, String> beanToMapString(Object object) {
try {
Map<String, String> result = null;
BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : properties) {
if (null == result) {
result = new HashMap<>(0);
}
Method method = property.getReadMethod();
String name = property.getName();
if ("class".equals(name)) {
continue;
}
result.put(name, method.invoke(object).toString());
2021-01-24 21:21:46 +08:00
}
2021-01-28 12:13:15 +08:00
return result;
} catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
throw new TypeConversionException(e.getMessage(), e);
2021-01-24 21:21:46 +08:00
}
}
/**
* map转obj需要map的key和obj的属性对应要有标准的set方法
*
* @param map
* @param clazz
* @return
*/
public static <T> T mapToBean(Map<String, Object> map, Class<T> clazz) {
try {
Field[] fields = clazz.getDeclaredFields();
Object instanceObj = clazz.newInstance();
for (Entry<String, Object> kvs : map.entrySet()) {
Object value = kvs.getValue();
if (value == null) {
continue;
}
for (Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
if (StringUtils.equals(fieldName, kvs.getKey())) {
Method method = clazz.getMethod("set" + WStringUtil.firstToUpper(fieldName), field.getType());
if (field.getType() == int.class) {
method.invoke(instanceObj, Integer.parseInt(value.toString()));
} else if (field.getType() == String.class) {
method.invoke(instanceObj, value.toString());
} else if (field.getType() == Date.class) {
method.invoke(instanceObj, DateUtil.sdfTime.parse(value.toString()));
} else if (field.getType() == Double.class) {
method.invoke(instanceObj, Double.parseDouble(value.toString()));
} else if (field.getType() == Float.class) {
method.invoke(instanceObj, Float.parseFloat(value.toString()));
} else if (field.getType() == Long.class) {
method.invoke(instanceObj, Long.parseLong(value.toString()));
} else if (field.getType() == Boolean.class) {
method.invoke(instanceObj, Boolean.parseBoolean(value.toString()));
} else if (field.getType() == Short.class) {
method.invoke(instanceObj, Short.parseShort(value.toString()));
}
break;
}
}
}
return clazz.cast(instanceObj);
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* map队列转bean队列
*
* @param listMap
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> mapListToBeanList(List<Map<String, Object>> listMap, Class<T> clazz) {
List<T> list = new ArrayList<>();
if (listMap == null || listMap.isEmpty()) {
return list;
}
for (Map<String, Object> map : listMap) {
list.add(mapToBean(map, clazz));
}
return list;
}
/**
* 冒泡排序
*
* @param sortMapList 待排序列表
* @param sortKey 排序Key
* @param isAsc 是否正向
* @param isNumber 是否数字
*/
public static void bubbleSort(List<Map<String, Object>> sortMapList, String sortKey, boolean isAsc, boolean isNumber) {
Map<String, Object> tempMap;
Map<String, Object> prevMap;
Map<String, Object> nextMap;
for (Map<String, Object> map : sortMapList) {
for (int i = 0; i < sortMapList.size() - 1; i++) {
int nextIndex = i + 1;
prevMap = sortMapList.get(i);
String prevSortKey = prevMap.get(sortKey) == null ? "" : prevMap.get(sortKey).toString();
nextMap = sortMapList.get(nextIndex);
String nextSortKey = nextMap.get(sortKey) == null ? "" : nextMap.get(sortKey).toString();
if (isAsc) {
if (isNumber) {
if (NumberUtils.toDouble(prevSortKey, 0D) > NumberUtils.toDouble(nextSortKey, 0D)) {
tempMap = prevMap;
sortMapList.set(i, nextMap);
sortMapList.set(nextIndex, tempMap);
}
} else {
if (prevSortKey.compareTo(nextSortKey) > 0) {
tempMap = prevMap;
sortMapList.set(i, nextMap);
sortMapList.set(nextIndex, tempMap);
}
}
} else {
if (isNumber) {
if (NumberUtils.toDouble(prevSortKey, 0D) < NumberUtils.toDouble(nextSortKey, 0D)) {
tempMap = prevMap;
sortMapList.set(i, nextMap);
sortMapList.set(nextIndex, tempMap);
}
} else {
if (prevSortKey.compareTo(nextSortKey) < 0) {
tempMap = prevMap;
sortMapList.set(i, nextMap);
sortMapList.set(nextIndex, tempMap);
}
}
}
}
}
}
2021-01-28 12:13:15 +08:00
/**
* 类型转换异常
*/
public static class TypeConversionException extends RuntimeException {
public TypeConversionException() {
}
public TypeConversionException(String message) {
super(message);
}
public TypeConversionException(String message, Throwable cause) {
super(message, cause);
}
public TypeConversionException(Throwable cause) {
super(cause);
}
public TypeConversionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
2021-01-24 21:21:46 +08:00
}