package com.imagedt.pawpaw.util;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
/**
* 實體對象轉成Map
* @author mousejoo
*
*/
public class MapUtil {
/**
* 實體對象轉成Map
* @param obj 實體對象
* @return 返回map
*/
public static Map<String, Object> objectToMap(Object obj) {
Map<String, Object> map = new HashMap<>();
if (obj == null) {
return map;
}
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* Map轉成實體對象
* @param map map實體對象包含屬性
* @param clazz 實體對象類型
* @return 返回對象
*/
public static Object mapToObject(Map<String, Object> map, Class<?> clazz) {
if (map == null) {
return null;
}
Object obj = null;
try {
obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
field.set(obj, map.get(field.getName()));
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 對比兩個相同key的map的值
* 用map的entrySet()的增強型for循環(性能效率較高)
* @param m1 不返回
* @param m2 返回map2 中與map1 不同的key-value值
* @return 返回map2 中與map1 不同的key-value值
*/
public static Map<String, Object> compareMap(Map<String, Object> m1, Map<String, Object> m2){
Map<String, Object> map = new HashMap<>();
for(Map.Entry<String, Object> entry1:m1.entrySet()){
Object m1value = entry1.getValue() == null?"":entry1.getValue();
Object m2value = m2.get(entry1.getKey()) == null?"":m2.get(entry1.getKey());
if (!m1value.equals(m2value)) {//若兩個map中相同key對應的value不相等
map.put(entry1.getKey(), m2value);
}
}
return map;
}
/**
* 比較兩個map中key,相同,獲取其中的value
* @param finalMap 常量map
* @param m2 跟常量比較的map
* @return 返回跟常量map的key相同的key-value
*/
public static Map<String, Object> compareKeyMap(Map<String, Object> finalMap, Map<String, Object> m2){
Map<String, Object> map = new HashMap<>();
Set<String> keys = finalMap.keySet();
for (String key : keys) {
if (m2.containsKey(key)){
map.put(key, finalMap.get(key));
}
}
return map;
}
}
Map工具類(實體轉換)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.