最近项目中,反复需要用到比较两个Bean是否全等的情况,许多人都是一个元素一个元素的比下去
,效率太低了。于是写了一个用于比较两个同构Bean的函数与大家分享,若有什么更好的办法也请不吝赐教。
/**
* 比较两个Bean中所有元素是否全等,是返回True,有一个不等则返回False<br/>
* 参数的位置和结果无关
* @param obj1 第一个Bean
* @param obj2 第二个Bean
* @return 是否全等的boolean值
*/
private boolean compareBeans(Object obj1, Object obj2) {
if((null == obj1 && null != obj2) || (null != obj1 && null == obj2)) {
return false;
} else if(null == obj1 && null == obj2){
return true;
}
Field[] fieldArr1 = obj1.getClass().getDeclaredFields();
Field[] fieldArr2 = obj2.getClass().getDeclaredFields();
if(fieldArr1.length != fieldArr2.length) {
return false;
} else {
Field field1, field2;
String typeName1, typeName2;
Object tmpObj1, tmpObj2;
for(int i = 0; i < fieldArr1.length; i++) {
field1 = fieldArr1[i];
field2 = fieldArr2[i];
field1.setAccessible(true);
field2.setAccessible(true);
typeName1 = field1.getType().getName();
typeName2 = field2.getType().getName();
if(!StringUtils.equals(typeName1, typeName2)) {
return false;
}
tmpObj1 = field1.get(obj1);
tmpObj2 = field2.get(obj2);
if((null == tmpObj1 && null != tmpObj2) || (null != tmpObj1 && null == tmpObj2)) {
return false;
} else if(null == tmpObj1 && null == tmpObj2){
continue;
}
if(boolean.class.equals(typeName1)) {
if(!((Boolean)tmpObj1).equals((Boolean)tmpObj2)) {
return false;
}
} else if(double.class.equals(typeName1)) {
if(!((Double)tmpObj1).equals((Double)tmpObj2)) {
return false;
}
} else if(float.class.equals(typeName1)) {
if(!((Float)tmpObj1).equals((Float)tmpObj2)) {
return false;
}
} else if(int.class.equals(typeName1)) {
if(!((Integer)tmpObj1).equals((Integer)tmpObj2)) {
return false;
}
} else if(long.class.equals(typeName1)) {
if(!((Long)tmpObj1).equals((Long)tmpObj2)) {
return false;
}
} else if(char.class.equals(typeName1)) {
if(!((Character)tmpObj1).equals((Character)tmpObj2)) {
return false;
}
} else if(String.class.equals(typeName1)) {
if(!((String)tmpObj1).equals((String)tmpObj2)) {
return false;
}
} else {
if(!(tmpObj1.toString().equals(tmpObj2.toString()))) {
return false;
}
}
}
}
return true;
}
项目中经常需要比较Bean的全等性,传统的逐一元素比较效率低下。分享一种快速比较同构Bean的方法,欢迎交流优化建议。
698

被折叠的 条评论
为什么被折叠?



