比较新对象和旧对象里面的对应值-返回对应的字段名称
/**
调用: strings = compareProperties(user, user1);
* 比较新对象和旧对象里面的对应值
* @param newObj 新對象
* @param oldObj 就對象
* @return 返回不同值的属性名称 例如:{name, id, sex}
*/
public static List<String> compareProperties(Object newObj, Object oldObj) {
try {
//判断是不是为空的
if (newObj == null && oldObj == null) {
return null;
} else {
//判断一下类型是不是保持一致的--也就是是不是对象是不是一致的
Class<?> newObjClass = newObj.getClass();
Class<?> oldObjClass = oldObj.getClass();
if (newObjClass != oldObjClass) {
return null;
}
//获取全部的字段
Field[] newObjFields = newObjClass.getDeclaredFields();
List<String> fields = new ArrayList<>();
for (Field newObjField : newObjFields) {
PropertyDescriptor newPropertyDescriptor = new PropertyDescriptor(newObjField.getName(), newObjClass);//得到类中字段的属性描述
Method newReadMethod = newPropertyDescriptor.getReadMethod();//从属性描述中获取对应的get方法
Object invoke1 = newReadMethod.invoke(newObj);//通过get方法获取对应的属性里面的值
Object invoke2 = newReadMethod.invoke(oldObj);
//这里有可能还有其他的类型转换的问题,占时只做第一个BigDecimal类型的处理
if (invoke1 instanceof BigDecimal) {
if ((invoke1 != null) && (invoke2 != null)) {
if (!(((BigDecimal) invoke1).compareTo((BigDecimal) invoke2) == 0)) {
fields.add(newObjField.getName());
}
}
} else {
if ((invoke1 != null) && (invoke2 != null)) {
if (!invoke1.equals(invoke2)) {
fields.add(newObjField.getName());
}
}
}
}
return fields;
}
} catch (Exception e) {
ExceptionUtil.getExceptionMessage(e);
}
return null;
}
Java 8 Stream
list集合
1. stream() 为集合获取串行流
2. distinct() 为集合进行去重
3. map() 映射每一个元素对应的 值
4. filter() 过滤每一个值的条件
5. sorted() 对于流进行排序 sorted(reverseOrder())相反的排序 sorted(Comparator.comparing(Student::getAge).reversed()) 自定义排序规则
6. .collect(Collectors.toList())
版权声明:本文为weixin_52352342原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。