快速对比两个对象中属性是否相同,哪些属性不同?
在工作中遇到一个需求,要识别一个数据前后的数据变更项有哪些,返回这个集合给另外一个系统用来更新数据。
核心思路有两步:
使用工具类将对象转map
通过keyset或者entryset遍历,分别取新旧对象该属性的值,如果不同则存进集合中
domain
public class User{
private String name;
private String age;
private String address;
}
service
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
private List<String> dealDiff(User userNew, User userOld) {
List<String> resultList = new ArrayList<>();
Map<String, Object> userNewMap = BeanUtils.beanToMap(userNew);
Map<String, Object> userOldMap = BeanUtils.beanToMap(userOld);
for (String key : userNewMap .keySet()) {
if (!(ObjectUtils.isEmpty(userNewMap .get(key)) ? userNewMap .get(key) == userOldMap .get(key) : userNewMap .get(key).equals(userOldMap .get(key)){
resultList.add(key);
}
}
return resultList;
}
中间的if判断思路:
- 如果新对象
get(key)为null,那么可以用==来判断,只要旧对象get(key)不为null,说明是有值的,则可以区分值是否不同 - 如果新对象
get(key)为null,那么可以用equals来判断,无论旧对象get(key)是否为null,都可以判断。不过前提是其中如果有自定义的对象,先重写其equals()和hashCode()
不过这样写有一个问题目前还无法识别:String类型的""和null无法对比,需要加一个StringUtil来判断,或者分析业务中该字段是否存在null的情况,如果有的话,给赋一个"",可以规避该情况。
其他问题暂时没有想到,想到的小伙伴请留言,谢谢
浙公网安备 33010602011771号