背景:
数据库查询对象,与接口返回对象不是同一个类型,但字段名称大部分相同,切字段个数较多,如果转换对象时每个字段都通过set、get方法进行赋值代码行数太多,不美观。
实现:
使用BeanUtils.copyProperties()可以进行对象的自动映射,但不可以操作数组集合,所以可以使用循环遍历集合来进行转换
ArrayList<QueryResult> queryResults = null; // 数据库查询结果
ArrayList<ResponseVO> responseVOS = new ArrayList<ResponseVO>();
for (QueryResult queryResult : queryResults) {
ResponseVO responseVO = new ResponseVO();
BeanUtils.copyProperties(queryResult,responseVO); // 循环进行转换
responseVO.setA(querResult.getA()+".00") // 需要特殊处理的字段可以再次赋值
responseVOS.add(responseVO);
}
return responseVOS; // 响应数据
可以看到代码中有new 还有for,看起来有点low,可以使用stream优化
ArrayList<QueryResult> queryResults = null; // 数据库查询结果
ArrayList<ResponseVO> responseVOS = queryResults..stream().map(m -> {
ResponseVO queryResult = new ResponseVO();
BeanUtils.copyProperties(m, queryResult);
queryResult.setA(m.getA+".00");
return queryResult; // 需要特殊处理的字段可以再次赋值
}).filter(t ->t.getRunId() != null).collect(Collectors.toList());
return responseVOS; // 响应数据