你可以使用两个
HashMap<yourFieldName, yourFieldValue>
代替两个
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();
}
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" );
}
你应该检查一个映射中是否存在某个值,而在另一个映射中不存在。
你可以返回一个枚举类型,例如
EQUAL
、
DIFFERENT
、
NOT PRESENT
...,而不是布尔类型。
return !oldFirstName.equalsIgnoreCase(newFirstName)
就足够了。 - benzonico