# 比較兩個bean的內容是否相同 ```java=\ package gov.nii.iim.common.util; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; public class ClassCompareUtil { /** * 比較兩個bean的屬性值,返回一個boolean,true則表示兩個bean的內容是有差異的 * @param oldObject 比較對象1 * @param newObject 比較對象2 * @return 回傳boolean值 */ public static boolean compareObject(Object oldObject, Object newObject) { Map<String, Map<String,Object>> resultMap=compareFields(oldObject,newObject); if(resultMap.size()>0) { System.out.println("兩個bean不相等"); return true; }else { System.out.println("兩個bean相等"); return false; } } /** * 比較兩個bean的屬性值,返回一個map以有差異的屬性值當作key和value做為一個Map,分別存oldObject,newObject的屬性值 * @param oldObject 比較對象1 * @param newObject 比較對象2 * @return 比較结果回傳map */ @SuppressWarnings("rawtypes") public static Map<String, Map<String,Object>> compareFields(Object oldObject, Object newObject) { Map<String, Map<String, Object>> map = null; try{ /** * 同一個class才做比較 */ if (oldObject.getClass() == newObject.getClass()) { map = new HashMap<String, Map<String,Object>>(); Class clazz = oldObject.getClass(); //獲取object的所有屬性 PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { //獲取所有屬姓名稱 String name = pd.getName(); //獲取所有屬姓名稱的get方法 Method readMethod = pd.getReadMethod(); // 在oldObject上用get方法來獲得oldObject的屬性值 Object oldValue = readMethod.invoke(oldObject); // 在newObject上用get方法來獲得newObject的屬性值 Object newValue = readMethod.invoke(newObject); if(oldValue instanceof List){ continue; } if(newValue instanceof List){ continue; } if(oldValue instanceof Timestamp){ oldValue = new Date(((Timestamp) oldValue).getTime()); } if(newValue instanceof Timestamp){ newValue = new Date(((Timestamp) newValue).getTime()); } //如果欄位名稱等於這些欄位就不比較 if(name.equals("createUserId") || name.equals("createDeptId") || name.equals("createTime") || name.equals("maintainUserId") || name.equals("maintainDeptId") || name.equals("maintainProgramId") || name.equals("maintainHost") || name.equals("lastUpdateTime")) { continue; } if(oldValue == null && newValue == null){ continue; }else if(oldValue == null && newValue != null){ Map<String,Object> valueMap = new HashMap<String,Object>(); valueMap.put("oldValue",oldValue); valueMap.put("newValue",newValue); map.put(name, valueMap); continue; } if (!oldValue.equals(newValue)) {// 比較兩個值是否相等,如果不相等就放入Map if(name.equals("newExtendDate") || name.equals("extendMark")) { System.out.println("newValue:"+newValue.toString()); if(newValue == null || newValue.toString().equals("")) { continue; } } Map<String,Object> valueMap = new HashMap<String,Object>(); valueMap.put("oldValue",oldValue); valueMap.put("newValue",newValue); map.put(name, valueMap); } } } }catch(Exception e){ e.printStackTrace(); } return map; } } ``` ###### tags: `Java`