List<Map<String, Object>>转List<T>
- 传入需要转换的clazz
- Map的值Object转换为T的Field对应类型
/**
* List<Map<String, Object>> 到 List<T> 数据转换
*/
public static <T> List<T> setList(List<Map<String, Object>> srcList, Class<T> clazz) {
List<T> list = new ArrayList<>();
srcList.forEach(x -> {
try {
T t = clazz.newInstance();
Field[] fields = t.getClass().getDeclaredFields();
for (Field field : fields) {
if (!"serialVersionUID".equals(field.getName())) {
//设置对象的访问权限,保证对private的属性的访问
field.setAccessible(true);
//读取配置转换字段名,并从map中取出数据
Object v = x.get(field.getName());
field.set(t, convert(v, field.getType()));
}
}
list.add(t);
} catch (Exception ex) {
log.error(ex.toString());
}
});
return list;
}
/**
* Field类型转换
*/
private static <T> T convert(Object obj, Class<T> type) {
if (obj != null && StrUtil.isNotBlank(obj.toString())) {
if (type.equals(String.class)) {
return (T) obj.toString();
} else if (type.equals(BigDecimal.class)) {
return (T) new BigDecimal(obj.toString());
}
//其他类型转换......
}
return null;
}
网友评论