如果对象是bean
import java.lang.reflect.Field;
public static <T> Map<String, String> compare(T obj1, T Obj2)
throws Exception {
Map<String, String> result = new HashMap<String, String>();
Field[] fs = obj1.getClass().getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true);
Object v1 = f.get(obj1);
Object v2 = f.get(Obj2);
result.put(f.getName(), String.valueOf(equals(v1, v2)));
}
return result;
}
throws Exception {
Map<String, String> result = new HashMap<String, String>();
Field[] fs = obj1.getClass().getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true);
Object v1 = f.get(obj1);
Object v2 = f.get(Obj2);
result.put(f.getName(), String.valueOf(equals(v1, v2)));
}
return result;
}
public static boolean equals(Object obj1, Object obj2) {
if (obj1 == obj2) {
return true;
}
if (obj1 == null || obj2 == null) {
return false;
}
return obj1.equals(obj2);
}
if (obj1 == obj2) {
return true;
}
if (obj1 == null || obj2 == null) {
return false;
}
return obj1.equals(obj2);
}
如果对象是集合(集合中存map)
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.builder.EqualsBuilder;
/**
* 比较的工具类
* @author Carsomyr
*
*/
public class CompareUtil {
/**
* 比较两个Collections中的数据是否一致
* @param source1
* @param source2
* @param primaryKey : {Collections中元素主键字段,唯一确定一个元素,为空则按原始顺序比较}
* @param specifiedFields : {指定比较的特定字段,为空则比较所有字段}
* @return
*/
public static boolean compare(List<PageData> source1, List<PageData> source2, final String primaryKey, String[] specifiedFields){
boolean isEqual = true;
if(source1==null && source2!=null){
isEqual = false;
}else if(source1!=null && source2==null){
isEqual = false;
}else if(source1.size()!=source2.size()){
isEqual = false;
}else{
if(primaryKey!=null && !primaryKey.trim().equals("")){//按照主键排序,确保后续按相同的下标拿到的数据是相互对应的
Comparator<PageData> comparator = new Comparator<PageData>() {
@Override
public int compare(PageData o1, PageData o2) {
if(o1.getString(primaryKey)==null || o1.getString(primaryKey).trim().equals(""))
return 1;
else if(o2.getString(primaryKey)==null || o2.getString(primaryKey).trim().equals(""))
return -1;
else
return o1.getString(primaryKey).compareTo(o2.getString(primaryKey));
}
};
Collections.sort(source1, comparator);
Collections.sort(source2, comparator);
}
PageData pd1 = null;
PageData pd2 = null;
for(int i=0, j=source1.size(); i<j; i++){
pd1 = source1.get(i);
pd2 = source2.get(i);
if(!CompareUtil.isEqual(pd1, pd2, specifiedFields)){
isEqual = false;
break;
}
}
}
return isEqual;
}
/**
* 判断两个PageData的值是否一致
* @param pd1
* @param pd2
* @param specifiedFields
* @return
*/
@SuppressWarnings("rawtypes")
private static boolean isEqual(PageData pd1, PageData pd2, String[] specifiedFields) {
EqualsBuilder equalsBuilder = new EqualsBuilder();
boolean isEqual = true;
if(specifiedFields!=null){
for (String field : specifiedFields) {
equalsBuilder.append(pd1.getString(field), pd2.getString(field));
}
isEqual = equalsBuilder.isEquals();
} else {
Set pd1Set = pd1.keySet();
Set pd2Set = pd2.keySet();
if(pd1Set==null && pd2Set!=null){
isEqual = false;
} else if(pd1Set!=null && pd2Set==null){
isEqual = false;
} else if(pd1Set.size()!=pd2Set.size()){
isEqual = false;
} else {
Iterator iter = pd1Set.iterator();
Object pd1Key = null;
while(iter.hasNext()){//若两个PageData的key不一致,视为不同
pd1Key = iter.next();
if(!pd2.containsKey(pd1Key)){
isEqual = false;
break;
}
}
if(isEqual){//当两个PageData的key一致,但相同的key对应了不同的值,视为不同,否则视为相同
iter = pd1Set.iterator();
while(iter.hasNext()){
pd1Key = iter.next();
equalsBuilder.append(pd1.get(pd1Key), pd2.get(pd1Key));
}
isEqual = equalsBuilder.isEquals();
}
}
}
return isEqual;
}
}