用java获取两个相同实体中的不同数据
项目中需要获取修改前和修改后的不同数据并进行保存。
目前我接手的这个项目需要记录修改前和修改后的数据,就借鉴别人的开发的一个工具做了优化,不多说,上工具类代码:
public static List getUser(Object a, Object b)
throws IllegalArgumentException, IllegalAccessException {
Map<String, List> map = new HashMap<String, List>();
Field[] declaredFields2 = a.getClass().getDeclaredFields();
Field[] declaredFields23 = b.getClass().getDeclaredFields();
//StringBuilder xiugaiqian = new StringBuilder();
List list = new ArrayList();
//StringBuffer xiugaihou = new StringBuffer();
for (int i = 0; i < declaredFields2.length; i++) {
cheak cheak = new cheak();
declaredFields2[i].setAccessible(true);
declaredFields23[i].setAccessible(true);
//此处可以忽略掉你不想比对的数据
/*if (declaredFields23[i].getName().equals("sex")){
break;
}*/
if (declaredFields2[i].get(a) != null && declaredFields23[i].get(b) != null) {
if (!declaredFields2[i].get(a).equals(declaredFields23[i].get(b))) {
//如果需要获取中文注释用
//declaredFields2[i].getAnnotation(ApiModelProperty.class).value()
cheak.setQianEnglishName(declaredFields2[i].getName());
cheak.setQianText(declaredFields2[i].get(a).toString());
cheak.setHouEnglishName(declaredFields23[i].getName());
cheak.setHouText(declaredFields23[i].get(b).toString());
list.add(cheak);
/*strMap.add(declaredFields2[i].getName() + ":" + declaredFields2[i].get(a));
houList.add(declaredFields23[i].getName() + ":" + declaredFields23[i].get(b));*/
}
} else if (declaredFields2[i].get(a) == null && declaredFields23[i].get(b) != null) {
cheak.setQianEnglishName(declaredFields2[i].getName());
cheak.setQianText(declaredFields2[i].get(a).toString());
cheak.setHouEnglishName(declaredFields23[i].getName());
cheak.setHouText(declaredFields23[i].get(b).toString());
list.add(cheak);
} else if (declaredFields2[i].get(a) != null && declaredFields23[i].get(b) == null) {
cheak.setQianEnglishName(declaredFields2[i].getName());
cheak.setQianText(declaredFields2[i].get(a).toString());
cheak.setHouEnglishName(declaredFields23[i].getName());
cheak.setHouText(declaredFields23[i].get(b).toString());
list.add(cheak);
}
}
我是建立一个实体去接收处理过的修改前后数据
public class cheak{
private String qianName;
private String qianEnglishName;
private String qianText;
private String houName;
private String houEnglishName;
private String houText;
}
主线程
public static void main(String[] args) throws IllegalAccessException {
Teacher t1 = new Teacher();
t1.setAge(1);
t1.setAge(12);
t1.setName("zs");
t1.setSex("wom");
Teacher t2 = new Teacher();
t2.setAge(1);
t2.setAge(13);
t2.setName("ls");
t2.setSex("man");
List user = GetDifference.getUser(t1, t2);
for (int i = 0; i < user.size(); i++) {
System.out.println(user.get(i).toString());
}
}
最后的结果
cheak{qianName='null', qianEnglishName='age', qianText='12', houName='null', houEnglishName='age', houText='13'}
cheak{qianName='null', qianEnglishName='name', qianText='zs', houName='null', houEnglishName='name', houText='ls'}
cheak{qianName='null', qianEnglishName='sex', qianText='wom', houName='null', houEnglishName='sex', houText='man'}