/**
* 对象对比
*
* @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"))
本文介绍了如何使用Java静态方法`objectCompare`进行对象的深度属性比较,通过filterFields参数指定要比较的字段,并处理日期类型和其他数据类型。示例展示了如何通过`organize1`和`organize2`对象的id、pid等字段进行精确对比。
1045

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



