目录
Java中2个对象字段值怎么比较是否相同
java
工具类
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个对象字段值怎么比较是否相同的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处
