/**
* 对象对比
*
* @param o1
* @param o2
* @param filterFileds
* @param <T>
* @return
*/
public static <T> boolean objectCompare(T o1, T o2, String... filterFileds) {
try {
return toString(o1, filterFileds).equals(toString(o2, filterFileds));
} catch (Exception e) {
return false;
}
}
public static <T> String toString(T o, String... filterFileds) {
StringBuilder stringBuilder = new StringBuilder();
List<Field> fieldList = Lists.newArrayList();
Class<?> aClass = o.getClass();
while (aClass != null) {
fieldList.addAll(Arrays.asList(aClass.getDeclaredFields()));
aClass = aClass.getSuperclass();
}
ArrayList<String> filterList = Lists.newArrayList(filterFileds);
for (Field declaredField : fieldList) {
declaredField.setAccessible(true);
String name = declaredField.getName();
if (filterList.contains(name) || name.equals("serialVersionUID")) {
continue;
}
Object value = null;
try {
value = declaredField.get(o);
} catch (IllegalAccessException e) {
}
if (value == null) {
continue;
}
if (value instanceof Date) {
value = String.valueOf(((Date) value).getTime());
stringBuilder.append(name).append(":");
} else {
value = value.toString();
}
stringBuilder.append(name).append(":").append(value).append(",");
}
return stringBuilder.toString();
}
使用:
CompareUtil.objectCompare(organize1, organize2, "id", "pid", "orgName", "sort", "status", "createGuid"))