比较两个相同对象中的每一个字段值
package com.lys;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 比较对象字段
* @author lys
* @version 1.0
* @date 2020/12/7 13:54
*/
public class CompareObjectFieldsUtils {
private static final String GET_METHOD_RPE = "get";
private static final String SET_METHOD_RPE = "set";
private static final String GET_CLASS_MECHOD_NAME = "getClass";
private static final char[] FIELD_NAME_ELEMENT = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final String UNDERLINE = "_";
/**
* 比较对象属性
* @param obj1 对象1
* @param obj2 对象2
* @param compareFields 限制比较的字段 传空比较所有
* @param <T> 类
* @return 字段名 - 值是否相同
*/
public static <T> Map<String,Boolean> compareObjFields(T obj1, T obj2, List<String> compareFields) throws Exception{
PropertyDescriptor[] pds = Introspector.getBeanInfo(obj1.getClass(), Object.class).getPropertyDescriptors();
Map<String,Boolean> result = new HashMap<>();
if(pds == null || pds.length <= 0){
return result;
}
for (PropertyDescriptor p : pds){
// 是否比对该字段
if(CollectionUtils.isNotEmpty(compareFields) && !compareFields.contains(p.getNa