对象字段对比工具类

变更字段对比,可能存在列表对比的情况
代码地址,可以直接运行测试方法。Bean-Compare Utils
在这里插入图片描述

字段对比工具类,查询方法。 通过操作记录ID、ClassName、CompareKey 逐级归类。

package os.component.compare.compare;

import org.springframework.beans.BeanUtils;
import org.springframework.util.Assert;

import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 数据字段对比工具类
 */
public class CompareUtils {
   

    /**
     * 获取最新一次操作记录所有的字段变更并分组, 返回对应的变更过的字段
     *
     * @param compareDtoList 最新一次操作记录变更的字段列表
     * @param clazzs        涉及到的类列表
     */
    public static final List<CompareVO> getChangedFiledMap(List<Class> clazzs, List<CompareDto> compareDtoList) {
   
        Map<String, String> fieldNoteMap = new HashMap<>();
        for (Class clazz : clazzs) {
   
            fieldNoteMap.putAll(getFieldNoteMap(clazz));
        }
        return getChangedFiledMap(fieldNoteMap, compareDtoList);
    }

    /**
     * 获取一次操作记录所有的字段变更并分组、进行字段名转换
     *
     * @param compareDtoList 一次操作记录的所有字段变更记录
     * @param fieldNoteMap  多个类, 变更的字段名不能相同
     */
    private static final List<CompareVO> getChangedFiledMap(Map<String, String> fieldNoteMap,
                                                            List<CompareDto> compareDtoList) {
   
        List<CompareVO> compareVOList = new ArrayList<>();
        if (compareDtoList == null || compareDtoList.isEmpty()) {
   
            return compareVOList;
        }

        Map<String, List<CompareDto>> classTypeCompare = compareDtoList.
                stream().collect(Collectors.groupingBy(CompareDto::getClassType));
        classTypeCompare.forEach((classType, compareList) -> {
   
            Map<String, List<CompareDto>> compareKeyCompare = compareList.
                    stream().collect(Collectors.groupingBy(CompareDto::getCompareKey));
            compareKeyCompare.forEach((compareKey, compar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值