这篇文章主要介绍了Java中2个对象字段值怎么比较是否相同的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中2个对象字段值怎么比较是否相同文章都会有所收获,下面我们一起来看看吧。
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中2个对象字段值怎么比较是否相同”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。