2 つの s / s / sのHashMap<yourFieldName, yourFieldValue>
代わりに 2 つ(または複数のランダムな文字列)を使用できます。Array
List
Set
String
次に、両方のマップの各値をキーで比較する方法が必要です。
結果はHashMap<String,Boolean>
各フィールド キーの名前を含む になり、値が両方のマップで等しい場合は true、異なる場合は false になります。
将来、フィールドをいくつ追加しても、メソッドは変わりませんが、結果は変わります。
実行例: https://ideone.com/dIaYsK
コード
private static Map<String,Boolean> scanForDifferences(Map<String,Object> mapOne,
Map<String,Object> mapTwo){
Map<String,Boolean> retMap = new HashMap<String,Boolean>();
Iterator<Map.Entry<String, Object>> it = mapOne.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String,Object> entry = (Map.Entry<String,Object>)it.next();
if (mapTwo.get(entry.getKey()).equals(entry.getValue()))
retMap.put(entry.getKey(), new Boolean(Boolean.TRUE));
else
retMap.put(entry.getKey(), new Boolean(Boolean.FALSE));
it.remove(); // prevent ConcurrentModificationException
}
return retMap;
}
テスト ケースの入力
Map<String,Object> oldMap = new HashMap<String,Object>();
Map<String,Object> newMap = new HashMap<String,Object>();
oldMap.put("initials","Y. J.");
oldMap.put("firstName","Yogend");
oldMap.put("lastName","Jos");
oldMap.put("userName","YNJos");
oldMap.put("age","33");
newMap.put("initials","Y. J.");
newMap.put("firstName","Yogendra");
newMap.put("lastName","Joshi");
newMap.put("userName","YNJoshi");
newMap.put("age","33");
テスト ケースの実行
Map<String,Boolean> diffMap = Main.scanForDifferences(oldMap, newMap);
Iterator<Map.Entry<String, Boolean>> it = diffMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String,Boolean> entry = (Map.Entry<String,Boolean>)it.next();
System.out.println("Field [" + entry.getKey() +"] is " +
(entry.getValue()?"NOT ":"") + "different" );
}
値が 1 つのマップに存在し、別のマップには存在しないかどうかも確認する必要があります。
EQUAL
, DIFFERENT
, NOT PRESENT
...のようなブール値の代わりに ENUM を返すことができます。