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
暂无评论内容