近日在开发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字段啦