需求:当需要对两个实体类的数据进行对比,然后返回一个数据相同的比例值
思路:利用反射机制获得类中的数据和对应方法,然后依次比较计数;
实体类中都是简单类型,没有复杂类型,所以只是简单对比。
public static <T> float dataCompare(Object o1, Object o2, Class<T> clazz) {
int count = 0;
Field[] declaredFields = clazz.getDeclaredFields();
try {
for (Field field : declaredFields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();
Object object1 = getMethod.invoke(o1);
Object object2 = getMethod.invoke(o2);
if (object1 == null && object2 == null) {
count++;
}
if (object1 != null && object2 != null && object1.toString().equals(object2.toString())) {
count++;
}
}
} catch (IntrospectionException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
return (float) count / declaredFields.length;
}
然后是测试
@Test
public void test07(){
User user1 = new User(1,null,null,0,"11");
User user2 = new User(1,null,null,2,"11");
float v = DataUtil.dataCompare(user1, user2, User.class);
System.out.println(v);
}
结果是这样:
0.8
这个方法是将数据对比功能抽出来放到工具包中方便调用,菜鸟写轮子欢迎优化q_q