Java比较两个集合的值工具类

Java比较两个集合的值工具类

Java比较两个集合的值工具类

/**
 * 比较对象
 */
public List<T> Checksum(List<T> T1, List<T> T2) throws IllegalAccessException {
    //T1旧数据 T2新数据
    List<T> list = new ArrayList<>();
    //计数器
    int flag = 0;
    for (T class1 : T2) {//新数据
        for (T class2 : T1) {//旧数据
            //获取对象
            Class<?> hhhh = class1.getClass();
            Class<?> t2 = class2.getClass();
            //获取私有字段
            Field[] t1fields = hhhh.getDeclaredFields();
            Field[] t2fields = t2.getDeclaredFields();
            //创建接收器
            ConcurrentHashMap<String, Object> map1 = new ConcurrentHashMap<>();//旧数据
            ConcurrentHashMap<String, Object> map2 = new ConcurrentHashMap<>();//新数据
            //获取单个字段值
            for (Field field : t1fields) {
                field.setAccessible(true);
                if (!ObjectUtils.isEmpty(field.get(class1))) {
                    map1.put(field.getName(), field.get(class1));
                }
            }
            for (Field field : t2fields) {
                field.setAccessible(true);
                if (!ObjectUtils.isEmpty(field.get(class2))) {
                    map2.put(field.getName(), field.get(class2));
                }
            }
            //数据校验
            for (String key2 : map2.keySet()) {//新数据
                for (String key1 : map1.keySet()) {//旧数据
                    if (!map2.get(key2).equals(map1.get(key1))) {
                        flag++;

                    }

                }
            }

        }
            //成员属性比较
            if (flag > 0) {
                list.add(class2);
                flag = 0;
            }
    }
    //如果数据未修改为0
    if (T1.size() == 0) {
        list.addAll(T2);
    }
    //响应不一致的集合
    return list;
}

原理,利用反射获取集合对象泛型里面的每一个私有成员属性的值,并添加到新的集合里面进行返回

更新日志:

修复业务上的逻辑,突出问题为:校验之后集合数据全部一致没有进行筛选类似于覆盖

THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容