java两个对象匹配相同属性不同的值
java两个对象匹配相同属性不同的值
java两个对象匹配相同属性不同的值
注
: 遇到这么一个需求,修改表单的时候要生成一个日记记录修改了哪一个字段数据的值,日记要呈现修改前字段的值和修改后的值,由于表单字段高达一百个,所以不便使用直接获取每个字段的形式去匹配数据,便利用反射获取。
直接上代码:
传入两个对象
/**** 通过类反射比较两个对象的不同* @param user1* @param user2* @return*/public List<Map<String, String>> getListData(User user1,User user2){Map<String, String> orgobj = new HashMap<String, String>();Map<String, String> nowobj = new HashMap<String, String>();Field[] fs = user1.getClass().getDeclaredFields();for (Field f : fs) {f.setAccessible(true);Object v1 = null;Object v2 = null;try {v1 = f.get(user1);v2 = f.get(user2);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//拿到属性的类型/*String type = f.getGenericType().toString();System.out.println(type);*///if (!f.getType().equals(List.class)) {}// 不匹配list类型if (!equals(v1, v2)) {//两个对象相同属性不相同值的数据加入map中orgobj.put(f.getName(), v1.toString());nowobj.put(f.getName(), v2.toString());}}List<Map<String, String>> list = new ArrayList<Map<String, String>>();list.add(orgobj);//原来的对象属性值list.add(nowobj);//改变的对象属性值return list;}public static boolean equals(Object obj1, Object obj2) {if (obj1 == obj2) {return true;}if (obj1 == null || obj2 == null) {return false;}return obj1.equals(obj2);}
main方法的list中拿到的就是两个对象相同属性的不同值
(User实体类代码省略。。。。)
public static void main(String[] args) {User user1=new User();user1.setCode("321");user1.setUserName("张三");User user2=new User();user2.setCode("123");user2.setUserName("李四");//传入两个不同属性值的对象去做匹配List<Map<String, String>> list = getListData(user1,user2);//判断一个是否长度为空即可,如果两个对象的所有属性值都相同则list为nullif(list.get(0).size()>0){//输出对象user1的属性值System.err.println("user1:"+list.get(0).toString());//输出对象user2的属性值System.err.println("user2:"+list.get(1).toString());}}
输出结果为:
user1:{code=321, userName=张三}
user2:{code=123, userName=李四}
最新文章
- 网络命令(ARP、PING)的使用分析
- 用php调用接口api
- CNN中卷积和池化计算公式
- Annotation 介绍
- 最新大数据可视化展示效果,别误会了,这才是可视化该有的样子
- linux下开启、关闭、重启mysql服务命令
- 职场之路
- 电视信号的数字化
- html怎么多行超出省略号,css+js 如何实现多行文字超出显示省略号(需要同时兼容ie chrome等浏览器)...
- 排列组合算法(全排列、全组合)
- HashTable 使用
- pgpool 主从流复制模式下的安装使用
- Java Integer值范围问题
- javascript弹出对话框
- 在Python中,可以使用try
- linux curl命令详解,以及实例
- ST