比较两个Bean是否相等

最近项目中,反复需要用到比较两个Bean是否全等的情况,许多人都是一个元素一个元素的比下去,效率太低了。于是写了一个用于比较两个同构Bean的函数与大家分享,若有什么更好的办法也请不吝赐教。

 

/**
 * 比较两个Bean中所有元素是否全等,是返回True,有一个不等则返回False<br/>
 * 参数的位置和结果无关
 * @param obj1 第一个Bean
 * @param obj2 第二个Bean
 * @return 是否全等的boolean值
 */
private boolean compareBeans(Object obj1, Object obj2) {

	if((null == obj1 && null != obj2) || (null != obj1 && null == obj2)) {
		return false;
	} else if(null == obj1 && null == obj2){
		return true;
	}
	Field[] fieldArr1 = obj1.getClass().getDeclaredFields();
	Field[] fieldArr2 = obj2.getClass().getDeclaredFields();
	if(fieldArr1.length != fieldArr2.length) {
		return false;
	} else {
		Field field1, field2;
		String typeName1, typeName2;
		Object tmpObj1, tmpObj2;
		for(int i = 0; i < fieldArr1.length; i++) {
			field1 = fieldArr1[i];
			field2 = fieldArr2[i];
			field1.setAccessible(true);
			field2.setAccessible(true);
			typeName1 = field1.getType().getName();
			typeName2 = field2.getType().getName();
			if(!StringUtils.equals(typeName1, typeName2)) {
				return false;
			}
			tmpObj1 = field1.get(obj1);
			tmpObj2 = field2.get(obj2);
			if((null == tmpObj1 && null != tmpObj2) || (null != tmpObj1 && null == tmpObj2)) {
				return false;
			} else if(null == tmpObj1 && null == tmpObj2){
				continue;
			}
			if(boolean.class.equals(typeName1)) {
				if(!((Boolean)tmpObj1).equals((Boolean)tmpObj2)) {
					return false;
				}
			} else if(double.class.equals(typeName1)) {
				if(!((Double)tmpObj1).equals((Double)tmpObj2)) {
					return false;
				}
			} else if(float.class.equals(typeName1)) {
				if(!((Float)tmpObj1).equals((Float)tmpObj2)) {
					return false;
				}
			} else if(int.class.equals(typeName1)) {
				if(!((Integer)tmpObj1).equals((Integer)tmpObj2)) {
					return false;
				}
			} else if(long.class.equals(typeName1)) {
				if(!((Long)tmpObj1).equals((Long)tmpObj2)) {
					return false;
				}
			} else if(char.class.equals(typeName1)) {
				if(!((Character)tmpObj1).equals((Character)tmpObj2)) {
					return false;
				}
			} else if(String.class.equals(typeName1)) {
				if(!((String)tmpObj1).equals((String)tmpObj2)) {
					return false;
				}
			} else {
				if(!(tmpObj1.toString().equals(tmpObj2.toString()))) {
					return false;
				}
			}
		}
	}
	return true;
}

 

beandiff:BeanDiff是一个简单的库,可以使用反射来比较两个对象 BeanDiff BeanDiff是一个简单的库,用于使用反射比较两个对象。 这些对象不必具有相同的类型。 BeanDiff查找匹配的字段名称并比较值。 ##用法 A a = new A (); a . setName( " Hello " ); B b = new B (); b . setName( " World " ); BeanDiff diff = new BeanDiff (); diff . diff(a, b); assertTrue(diff . hasDifferences()); BeanDiff对象包含类型差异的映射,并且差分包含属性的路径和比较的值。 ###差异的示例输出 Difference{path=/name, left=Hello, right=World} BeanDiff也将反射用于diff值的字符串表示形式。 立即下载

相关推荐

Excel COUNTIF函数精确统计全解析:从模糊匹配到精准计数

在数据处理与办公自动化领域,条件计数是数据分析的基础操作,其核心原理在于对特定范围内满足设定条件的单元格进行识别与汇总。Excel中的COUNTIF函数是实现这一功能的常用工具,它通过文本匹配逻辑与通配符机制来执行条件判断。然而,其默认的模糊匹配行为常导致统计结果偏离预期,这正是精确统计的技术价值所在——确保数据汇总的准确性与可靠性,直接影响业务报告、薪酬核算、销售分析等应用场景的决策质量。本文聚焦COUNTIF函数的精确匹配技巧,深入剖析通配符(如星号*和问号?)的转义使用(通过波浪号~),并针对大小写敏

weixin_29040367的博客 351

java 比较两个bean_java中判断两个java bean对象相等

在创建对象时如何判断相同类的两个对象相等:class Person {private String name;private String idStr;public Person() {}public Person(String name, String idStr) {this.name = name;this.idStr = idStr;}public String getName() {re...

weixin_39958631的博客 1323

稀疏数据分析:马蹄估计量及其理论性质

稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验

一个不愿透露姓名的博客 3797

java 两个对象相等_java 比较两个对象是否相等

java 中比较两个bean对象是否相同,可以有以下几种方法重新实现hashcode()方法和equals()方法两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。在equals ()方法中比较指定的字段使用 org.apache.commons的工具类重写重新实现hashcode()方法和equals()方法xxx部分是将指定的字段不用比较@Ov...

weixin_30714077的博客 1054

Metal ECO实战:如何在不修改底层掩模的情况下修复芯片时序问题

本文深入探讨了Metal ECO技术在芯片设计中的应用,这是一种在不修改底层晶体管掩模的前提下,仅通过调整金属连线和替换预置填充单元来修复时序问题的“微创手术”。文章详细解析了其原理、适用场景、关键操作流程与命令,并分享了实战中的高级技巧与常见陷阱,为面临流片前时序违例的工程师提供了宝贵的修复指南。

wdx0123456的博客 430

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 541

java两个stringequal和h_java 判断两个bean 是否相等(技术点:反射)

知识点:1. class.getDeclaredFields(); 获取类的所有字段2.class.getMethods(); 获取类的方法3.objValue = method.invoke(obj, new Object[] {}); 通过反射获取属性的值,obj对象,new Object[] {} 方法参数1.beanpackage com.qimh.springbootfiledemo.u...

weixin_30558777的博客 294

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1034

java 如何比较两个 bean_java使用反射比较两个bean对象属性值是否相等

import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public classDomainEquals {/*** 日志操作类*/private static Logger ...

weixin_42403771的博客 1169

到底什么是指令集?什么是微架构?他们是什么关系?

指令集、处理器架构、芯片厂商、ARM、x86,其间关系还在迷糊吗?一文迅速理清!!

车载系统攻城狮 7811

ZW3D 二次开发-制作插件

1.Windows 7 SP1 或 Windows 10 或 Windows 11(推荐 Windows 11)2.Visual studio 2017-2022 (或 C/C++的任何其他集成开发环境)(推荐 Visual studio 2022)3.ZW3D 2023 或以上版本(建议使用与 ZW3D 一致的 API 的版本)4.Qt5.9.7(for Windows)博主学习使用环境的是:Windows 11 Version 24H2 + Visual studio 2022 + Qt5.9.7(fo

fhqiwmc的博客 809

Android判断同一个类的两个对象的内容是否相同

在编写对数据库差异化处理的时候,差异化就是把请求的json对象存入数据库时,当数据库有相同的数据时不更新,否则更新或插入。这里需要取出数据库的数据封装成对象。 对于内容的比较,这里使用重写类的equal()和hashCoad()方法。使用eclipse或AndroidStudio可以帮助自动生成。由于项目中请求的json拼装的对象的内容并不全部存入数据库,这就需要我们在自动生成的时候选择适当的字

u012453607的专栏 1万+

Android 13 RK3588 编译烧写实录全程

本文详细记录了RK3588主板在Android 13系统下的各项功能测试与编译过程。主要内容包括:1)网络功能测试(以太网、WiFi、蓝牙连接);2)外设接口测试(耳机、麦克风、USB、TF卡);3)硬件功能验证(RTC时钟、ADC采样、MIPI摄像头);4)系统设置(手势导航、开发者选项);5)Android 13 SDK编译环境搭建与源码获取方法。通过图文并茂的方式展示了各功能的配置方法、操作步骤和测试结果,为开发者提供了全面的参考指南。

hnjzfwy的博客 238

java使用反射比较两个bean对象属性值是否相等

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; public class DomainEquals { /...

a57109355的博客 645

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java两个对象字段值比较_使用反射比较两个bean对象属性值是否相等

[java]代码库import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public class DomainEquals {/*** 日志操作类*/private stat...

weixin_33484805的博客 1063

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java getclass 相等_java使用反射比较两个bean对象属性值是否相等

importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;importorg.apache.log4j.Logger;publicclassDomainEquals{/***日志操作类*/privatestaticLogger...

weixin_30193269的博客 246

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

两个对象比较是否有数据变动

import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; public class DomainEquals { /** * 日志操作类 */ private static Logger logger = Logger.getL..

qq_37894645的博客 502

利用反射比对两个对象属性值是否相等

示例代码:可直接复制使用 public class DomainEquals { /** * 日志操作类 */ private static Logger logger = Logger.getLogger(DomainEquals.class); public DomainEquals() { } /** * 比较两个BEAN或MAP对象的值是否相等 * 如果是BEAN与MAP对象比较时MAP中的key值应与BEAN的属

爱哭的毛毛虫 528

spring基础——<bean>scope属性

通过对scope属性的设置可实现单例或多例,默认不设置为单例 singleton 单例(默认值) prototype 多例 例如 <bean id="user" class="spring.User" scope="prototype"></bean> 判断是多例还是单例 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); User user1 = beanFactory.getB

cc_xxo的博客 654

Spring-IOC-XML配置文件实现-bean的作用域

一、bean的作用域 (1)单例:在读取完配置文件后,spring就会创建该对象。 (2)多例:在读取完配置文件后,spring不会创建该对象,而是在每次调用getBean方法时才创建。 二、利用bean标签中的scope属性进行设置 (1)scope=“singleton”:单例(默认) (2)scope=“prototype”:多例 三、 ...

qq_25243147的博客 353

spring的DI功能是如何实现的,bean是如何装载的

核心依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM...

小汤圆 236

java比较两个对象相等

在开发中,我们可能经常需要比较两个对象的内容是否一样。 1.java基本类型(int,double…)只要用 == 比较就可以了。 int a = 1; int b = 1; System.out.println(a == b);//输出为true 2.String类型不是java中的基本类型,不能简单的用 == 来判断 String strA = "aaa"; String strB =...的

qq_25450593的博客 680

利用java反射机制比较同一个bean的两个对象的值是否相同

import java.lang.reflect.Field; import java.math.BigDecimal;public class CompareEntity { public static void main(String[] args) { Entity1 e1 = new Entity1(); e1.setName("名字"); e1.setAge(10); e1.

怀揣梦想,永不止步. 2075

java 比较两个对象是否一致

 /**      * 比较对象值是否发生了改变      * @param obj1        * @param obj2      * @return      */     public static boolean contrastObj(Object obj1, Object obj2) {         boolean isEquals = true;     ...

liwenxiaoxiao的博客 689

两个List对比内容是否相等

判断两个集合的长度及是否包含在内 List<DaXiaoBean> listcur = new ArrayList<>(); List<DaXiaoBean> listsql = new ArrayList<>(); //省略两个集合增加数据源。。。。 logger.e(...

weixin_42274773的博客 1446
上一篇: 查看和修改Oracle服务器端的字符集(转帖)
下一篇: EclEMMA(基于Eclipse覆盖率测试插件)在Jboss上的使用说明
fdsa4321
博客等级 码龄20年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值