Java中2个对象字段值比较是否相同
1、工具类
package com.shucha.deveiface.biz.utils; /** * @author tqf * @Description * @Version 1.0 * @since 2022-03-21 16:50 */ import com.shucha.deveiface.biz.model.Comparison; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class CompareObjUtil { public static List<Comparison> compareObj(Object beforeObj, Object afterObj) throws Exception{ List<Comparison> diffs = new ArrayList<>(); if(beforeObj == null) { throw new RuntimeException("原对象不能为空"); } if(afterObj == null) { throw new RuntimeException("新对象不能为空"); } if(!beforeObj.getClass().isAssignableFrom(afterObj.getClass())){ throw new RuntimeException("两个对象不相同,无法比较"); } //取出属性 Field[] beforeFields = beforeObj.getClass().getDeclaredFields(); Field[] afterFields = afterObj.getClass().getDeclaredFields(); Field.setAccessible(beforeFields, true); Field.setAccessible(afterFields, true); //遍历取出差异值 if(beforeFields != null && beforeFields.length > 0){ for(int i=0; i<beforeFields.length; i++){ Object beforeValue = beforeFields[i].get(beforeObj); Object afterValue = afterFields[i].get(afterObj); if((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null)){ Comparison comparison = new Comparison(); comparison.setField(beforeFields[i].getName()); comparison.setBefore(beforeValue); comparison.setAfter(afterValue); comparison.setIsUpdate(true); diffs.add(comparison); } } } return diffs; } } public static void main(String[] args) throws Exception { ApIData apIData = new ApIData() .setName("张三") .setMonth("5") .setHh("1"); ApIData apIData1 = new ApIData() .setName("张三") .setMonth("9") .setHh("35"); List<Comparison> list = CompareObjUtil.compareObj(apIData, apIData1); System.out.println(list); }
package com.shucha.deveiface.biz.model; import lombok.Data; import lombok.experimental.Accessors; /** * @author tqf * @Description 接口请求参数类 * @Version 1.0 * @since 2020-08-03 20:06 */ @Data @Accessors(chain = true) //注解用来配置lombok如何产生和显示getters和setters的方法 public class ApIData { /** * 身份证号 */ private String ident_card; /** * 姓名 */ private String name; /** * 户号 水务局使用查询 */ private String hh; /** * 用水月份 YYYY-MM */ private String month; /** * 房东用户ID */ private String owner_id; /** * 所属街道 */ private String street_name; }
到此这篇关于Java中2个对象字段值比较是否相同的文章就介绍到这了,更多相关Java 对象字段值比较内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
赞 (0)