java 两个bean数据对比

工具

/**
	 * @param obj1 进行属性比较的对象1
	 * @param obj2 进行属性比较的对象2
	 * @param ignoreArr 选择忽略比较的属性数组
	 * @return 属性差异比较结果 map 
	 */
	@SuppressWarnings("rawtypes")
	public static Map<String, List<Object>> compareFields(Object obj1,Object obj2,String[] ignoreArr){
		try {
			Map<String, List<Object>> map = new HashMap<String, List<Object>>();
			List<String> ignoreList = null;
			if (ignoreArr !=null && ignoreArr.length>0) {
				ignoreList = Arrays.asList(ignoreArr);
			}
			if (obj1.getClass() == obj2.getClass()) { //只有两个对象都是同一类型才有可比性
				Class clazz = obj1.getClass();
				//获取object的属性描述
				PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors();
				for (PropertyDescriptor pd : pds) {
					String name = pd.getName();
					if (ignoreList !=null && ignoreList.contains(name)) {
						continue;
					}
					Method readMethod = pd.getReadMethod();//获取属性的get方法
					//在obj1上调用get方法等同于获得obj1的属性值
					Object o1 = readMethod.invoke(obj1);
					//在obj2上调用get方法等同于获得obj2的属性值
					Object o2 = readMethod.invoke(obj2);
					//如果此属性是时间
					if (o1 instanceof Timestamp) {
						o1 = new Date(((Timestamp)o1).getTime());
					}
					if (o2 instanceof Timestamp) {
						o2 = new Date(((Timestamp)o2).getTime());
					}
					if (o1 == null && o2 == null) {
						continue;
					}else if (o1 == null && o2 !=null) {
						//不一致
						List<Object> list = new ArrayList<Object>();
						list.add(o1);
						list.add(o2);
						map.put(name, list);
						continue;
					}
					if (!o1.equals(o2)) {
						List<Object> list = new ArrayList<>();
						list.add(o1);
						list.add(o2);
						map.put(name, list);
					}
				}
			}
			return map;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

用法

Long id = Long.valueOf(req.getParameter("id"));
		ResponseBean rbOld = this.fhysryxxService.getFhysryxxmx(id);
		ResponseBean rbNew = this.fhysryxxService.getFhysryxxmxMirror(id);
		FhysryxxResult fhysryxxResultOld = (FhysryxxResult)rbOld.getResult();
		FhysryxxResult fhysryxxResultNew = (FhysryxxResult)rbNew.getResult();

		Map<String, ArrayList<XtXgrzmxDTO>> map = new HashMap<>();
		ArrayList<XtXgrzmxDTO> xtXgrzmxDTOS = new ArrayList<>();

		Map<String, List<Object>> compareResult = compareFields(fhysryxxResultOld, fhysryxxResultNew, 
				new String[] {"id","zgbjlshsj","zgbjlshyj","zgbjlshqm","zlfzrshqm","zlfzrshyj","zlfzrshsj",
						      "ecsh","shzt","zfbz","ccbjlshqm","ccbjlshyj","ccbjlshsj","cjr","cjrq","xgr","xgrq","tjr","tjrq"});
		/**
		list.get(0) 旧值  list.get(1)新值  key 就是实体字段
		*/
		Set<String> keySet = compareResult.keySet();
		for (String key : keySet) {
			List<Object> list = compareResult.get(key);
			XtXgrzmxDTO xtXgrzmxDTO = new XtXgrzmxDTO();
			xtXgrzmxDTO.setXgzdmc(FhysryxxEnum.of(key));
			xtXgrzmxDTO.setXz(list.get(1).toString());
			xtXgrzmxDTO.setYz(list.get(0).toString());
			xtXgrzmxDTOS.add(xtXgrzmxDTO);
		}

实体字段怎么转中文,用枚举

package cn.sckj.erp.xs.enums;

public enum  FhysryxxEnum {
    WTJBF("wtjbf","委托经办人"),
    SFZH("sfzh","身份证号"),
    CPH("cph","车牌号"),
    JSZHM("jszhm","驾驶证号码"),
    CYDW("cydw","承运单位"),
    FHDZ("fhdz","发货地址"),
    YSGJ("ysgj","运输工具"),
    YSSX("yssx","运输时限"),
    WDYQ("wdyq","温度要求"),
    MRBZ("mrbz","默认标志"),
    JSY("jsy","驾驶员"),
    ZCDZ("zcdz","注册地址"),
    FDDBR("fddbr","法定代表人"),
    LXDH("lxdh","联系电话"),
    YYZZ("yyzz","营业执照"),
    YYZZYXQ("yyzzyxq","营业执照有效期"),
    DLJYXKZ("dljyxkz","道路经营许可证"),
    DLJYXKZYXQ("dljyxkzyxq","道路经营许可证有效期"),
    WTYSXY("wtysxy","委托运输协议"),
    WTYSXYYXQ("wtysxyyxq","委托运输协议有效期"),
    JSZYXQ("jszyxq","驾驶证有效期"),
    SFZYXQ("sfzyxq","身份证有效期"),
    XSZ("xsz","行驶证"),
    XSZYXQ("xszyxq","行驶证有效期"),
    TJBGYXQ("tjbgyxq","体检报告有效期"),
    CXYXQ("cxyxq","车险有效期");
    


    private final String py;

    private final String chinese;

    FhysryxxEnum(String py,String chinese){
        this.py = py;
        this.chinese = chinese;
    }

    public String getPy() {
        return py;
    }

    public String getChinese() {
        return chinese;
    }

    public static String of(String py){
        for (FhysryxxEnum testEum : FhysryxxEnum.values()) {
            if (testEum.getPy().equals(py)) {
                return testEum.getChinese();
            }
        }
        return null;
    }
}

FhysryxxEnum.of(key) 就可以转成对应中文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值