比较两个实体类的属性值工具

Posted 帅性而为1号

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较两个实体类的属性值工具相关的知识,希望对你有一定的参考价值。

 

public static Map<String, CompareDTO> compareFields(Object source, Object target, List<String> comparedPropertyList) 
        try 
            Map<String, CompareDTO> map = Maps.newHashMap();

            if (CollectionUtils.isEmpty(comparedPropertyList)) 
                return null;
            

            if (source == null || target == null) 
                throw new BizException("source or target is null");

            

            // 只有两个对象都是同一类型的才有可比性
            if (source.getClass() != target.getClass()) 
                throw new BizException("incompatible type");
            

            Class clazz = source.getClass();
            // 获取object的属性描述
            PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors();
            // 这里就是所有的属性了
            for (PropertyDescriptor pd : pds) 
                // 属性名
                String name = pd.getName();
                // 如果不需要比较,跳到下一次循环
                if (!comparedPropertyList.contains(name)) 
                    continue;
                

                // get方法
                Method readMethod = pd.getReadMethod();
                // 在obj1上调用get方法等同于获得obj1的属性值
                Object o1 = readMethod.invoke(source);
                // 在obj2上调用get方法等同于获得obj2的属性值
                Object o2 = readMethod.invoke(target);
                if (o1 == null && o2 == null) 
                    continue;
                 else if (o1 == null && o2 != null) 
                    CompareDTO compareDTO = new CompareDTO();
                    compareDTO.setOldValue(o1);
                    compareDTO.setNewValue(o2);
                    map.put(name, compareDTO);
                    continue;
                
                // 比较这两个值是否相等,不等就可以放入map
                if (!o1.equals(o2)) 
                    CompareDTO compareDTO = new CompareDTO();
                    compareDTO.setOldValue(o1);
                    compareDTO.setNewValue(o2);
                    map.put(name, compareDTO);
                
            

            return map;
         catch (Exception e) 
            e.printStackTrace();
            return null;
        
    

 

以上是关于比较两个实体类的属性值工具的主要内容,如果未能解决你的问题,请参考以下文章

C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)

比较2个实体对象——CompareUtil工具类

比较2个实体对象——CompareUtil工具类

比较2个实体对象——CompareUtil工具类

为啥java 里要判断两个对象是不是相等呢?

C# 比较两个对象的属性值是不是有改变