近日在开发JAVA时,需求是合并两个对象的值,例如对象A的属性name值为null,对象B的属性name值为tom,需要把对象A和B合并成一个新的对象并且属性name值为tom。也就是说两个对象中属性有值的就保存到没有值的。
主要是用到 BeanUtil.copyProperties 这个来处理。
相关代码如入:
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
List<PayBillSimVo> payBillVoList = new ArrayList<>();
list.forEach(payBillDto -> {
PayBillSimVo simVo = Convert.convert(new TypeReference<>() {}, payBillDto);
JSONObject payBodyJson = payBillDto.getPayBody();
PayBillSimVo simVo2 = payBodyJson.to(PayBillSimVo.class);
BeanUtil.copyProperties(simVo, simVo2, options);
simVo.setPayChannel(payBillDto.getPayChannel()==1 ? WEIXINPAY : ALIPAY);
payBillVoList.add(simVo2);
});
说明:
设置了setIgnoreNullValue(true),这样当源对象的值为null时,忽略而不注入此值:
obj1中[a=1, b=null]
obj2中[a=null, b=2]
就是给obj1中的a字段可以给obj2中的a赋值, obj1中的b字段为null,设置了setIgnoreNullValue(true)后, 就不会将obj1的b给obj2中的b字段啦