我们再开发的过程中会用到集合嵌套对象转换的问题,想要代码更加规范的话。我们对接数据库的实体(entity)转 处理层的实体(resp)或者实体(req)时就会遇到该问题。
代码如下:
public List<OpenApiTreeResp> queryApiGroup() {
//存储转换后的嵌套数据
List<OpenApiTreeResp> openApiTreeRespList = new ArrayList<>();
//拿到转换之前的嵌套数据
List<OpenApiTreeModel> apiTreeModelList = openapiApiGroupService.queryTreeGroup();
//循环每一个一级节点,转换每一个节点下的children
for (OpenApiTreeModel item : apiTreeModelList) {
//创建新对象OpenApiTreeResp
OpenApiTreeResp openApiTreeResp = new OpenApiTreeResp();
//进行实体转换
BeanUtils.copyProperties(item, openApiTreeResp);
//创建存储children的集合对象
List<OpenApiTreeResp> openApiTreeResps = new ArrayList<>();
//如果一级的children为null,就不存在下级节点
if(item.getChildren()!=null){
//获取children数据,直到children为null停止
openApiTreeResps = queryNextData(item.getChildren());
}
openApiTreeResp.setChildren(openApiTreeResps);
openApiTreeRespList.add(openApiTreeResp);
}
return openApiTreeRespList;
}
/**
* 使用递归查找下一层数据(如果children不为null,则一直往下抓取)
* @param openApiTreeModel
*/
public List<OpenApiTreeResp> queryNextData(List<OpenApiTreeModel> openApiTreeModel){
List<OpenApiTreeResp> openApiTreeRespList = new ArrayList<>();
//循环children集合
for (OpenApiTreeModel item : openApiTreeModel) {
//创建新对象OpenApiTreeResp
OpenApiTreeResp openApiTreeResp = new OpenApiTreeResp();
//进行实体转换
BeanUtils.copyProperties(item, openApiTreeResp);
//判断如果children为null跳出循环,不在继续往下抓取
if (item.getChildren() == null) {
openApiTreeRespList.add(openApiTreeResp);
continue;
}
//递归
List<OpenApiTreeResp> treeRespList = queryNextData(item.getChildren());
openApiTreeResp.setChildren(treeRespList);
openApiTreeRespList.add(openApiTreeResp);
}
return openApiTreeRespList;
}
以上方法仅供参考。如有问题可以发表建议一起共同进步!