java 实体比较_java比较实体类

展开全部

这种情况你可以使用反射去写一个通用的方法,不过前提是你的32313133353236313431303231363533e4b893e5b19e31333363393664那些实体类都是简单的包装类,稍后奉上代码。代码如下:package pojo;

/**

* Created by liaokai on 2017/11/17 0017.

*/

public class Person {

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Person person = (Person) o;

if (age != person.age) return false;

return name != null ? name.equals(person.name) : person.name == null;

}

@Override

public int hashCode() {

int result = name != null ? name.hashCode() : 0;

result = 31 * result + age;

return result;

}

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

package util;

import pojo.Person;

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* Created by liaokai on 2017/11/17 0017.

*/

public class CompareUtil {

public List compareT(T t1,T t2,String className){

List list = new ArrayList();

//内容没改变直接返回

if(t1.equals(t2)){

return list;

}

try {

Class c = Class.forName(className);

//读取t1和t2中的所有属性

Field[] fields = c.getDeclaredFields();

for (int i = 0; i 

Field field =fields[i];

field.setAccessible(true);

Object value1=field.get(t1);

Object value2=field.get(t2);

//判断这两个值是否相等

if(!isValueEquals(value1,value2)){

Map map = new HashMap();

map.put("name",field.getName());

map.put("before",value1);

map.put("after",value2);

list.add(map);

}

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return list;

}

private boolean isValueEquals(Object value1, Object value2) {

if(value1==null&&value2==null){

return true;

}

if(value1==null&&value2!=null){

return false;

}

if(value1.equals(value2)){

return true;

}

return false;

}

}

package pojo;

import util.CompareUtil;

/**

* Created by liaokai on 2017/11/17 0017.

*/

public class Test {

public static void main(String[] args) {

Person p1 = new Person("张三",14);

Person p2 = new Person("张三",15);

Person p3 = new Person("李四",15);

CompareUtil compareUtil = new CompareUtil();

System.out.println(compareUtil.compareT(p1,p1,Person.class.getName()));

System.out.println(compareUtil.compareT(p1,p2,Person.class.getName()));

System.out.println(compareUtil.compareT(p1,p3,Person.class.getName()));

System.out.println(compareUtil.compareT(p2,p3,Person.class.getName()));

}

}

//运行结果

[]

[{before=14, name=age, after=15}]

[{before=张三, name=name, after=李四}, {before=14, name=age, after=15}]

[{before=张三, name=name, after=李四}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值