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 block
                e.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为null
        if(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=李四}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值