2 つのエンティティの属性値を比較し、異なる属性名をキーとしてマップを返し、値をリストとして返し、それぞれ obj1 と obj2 の値を格納します。コードは次のとおりです。
パッケージ com.schdri.bimgis.disaster.domain.util; インポート cn.hutool.core.util.ObjectUtil; インポート org.springframework.stereotype.Component; インポート java.beans.Introspector; インポート java.beans.PropertyDescriptor; インポート java. lang.reflect.Method; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.*; @Component public class CompareFiledUtil { /** * 2 つのエンティティ属性値を比較し、マップを返します。相違点 属性名がキー、値がそれぞれobj1とobj2の値を格納するリスト * * @param obj1 属性比較用のオブジェクト1 * @param obj2 属性比較用のオブジェクト2 * @paramignoreList どちらかを選択比較する必要のない属性名集合 * @return 属性差分比較結果マップ */ public static Map<String, List<Object>> CompareFields(Object obj1, Object obj2, List<String>ignoreList) { try { Map<String, List<Object>> map = new HashMap<String, List<Object>>( ); // 同じ型の 2 つのオブジェクトのみを比較できます if (obj1.getClass() == obj2.getClass()) { Class claz = obj1.getClass(); // オブジェクト [] の プロパティの説明 PropertyDescriptorを取得しますpds = Introspector.getBeanInfo(claz, Object.class).getPropertyDescriptors(); // (PropertyDescriptor pd : pds) の すべてのプロパティを示します。 { // プロパティ名 String name = pd.getName();getName(); // 現在の属性が比較を無視することを選択した場合は、次のサイクルにスキップします if (ignoreList != null &&ignoreList.contains(name)) { continue; } // メソッドを取得 Method readMethod = pd.getReadMethod(); // obj1 の get メソッドを呼び出すことは、obj1 オブジェクト o1 のプロパティ値を取得することと同等です。= readMethod .invoke(obj1); // obj2 の get メソッドを呼び出すことは、obj2 オブジェクトのプロパティ値を取得することと同じです o2 = readMethod.invoke(obj2); if (o1 instanceof Timestamp) { o1 = new Date((((タイムスタンプ) o1).getTime()); } if (o2 タイムスタンプのインスタンス) { o2 = 新しい日付(((タイムスタンプ) o2).getTime()); if (o2 インスタンスof BigDecimal) { o2 = ((BigDecimal) o2).setScale(2, BigDecimal.ROUND_HALF_UP) ; if ((ObjectUtil.isEmpty(o1) || o1.equals("null")) && (ObjectUtil.isEmpty(o2) || o2.equals("null")) { 続行 ; } if (o1 == null && o2 != null) { リスト list = new ArrayList(); list.add(o1); list.add(o2); map.put(名前, リスト); 続く; } // これら 2 つの値が等しいかどうかを比較し、等しくない場合はマップに入れることができます if (!o1.equals(o2)) { List list = new ArrayList(); list.add(o1 ); list.add(o2) ; map.put(name, list); } } } return map; } catch (Exception e) { e.printStackTrace(); return null; } } }
返された構造体は、必要に応じて戻り値の型を変更できます。。