Java中2个对象字段值比较是否相同

网友投稿 420 2022-08-04


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 compareObj(Object beforeObj, Object afterObj) throws Exception{

List 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

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 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;

}

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 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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot实现WebSocket即时通讯的示例代码(前端实现websocket即时通信)
下一篇:详解处理Java中的大对象的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~