可使用递归的方法去遍历树结构,声明一个递归方法tree2List,第一次将根节点数据传入,在方法里判断该节点是否有子级,有的话则继续调用该递归方方法。
代码如下:
下面的treeData即为树形结构数据,list为最终想要得到的List列表数据。
public List ebomQuery(MasterListEbomInput input) {
List<Map<String,Object>> list = new ArrayList();
try{
BomMiddlePlatformResult<Map<String, Object>> bomRes = bomMiddlePlatformFeign.ebomQuery(input);
if(bomRes.getCode()==200 && bomRes.getData() != null){
//处理树形结构为列表
Map<String,Object> treeData = (Map<String,Object>) bomRes.getData().get("tree");
tree2List(list,treeData);
//转为列表后子级字段仍有值,将其移除
for(Map map:list){
map.remove("children");
}
}
}catch (Exception e){
}
return list;
}
/**
* 树结构转列表,递归实现
* @param result 最终得到的List列表
* @param root 父级数据
*/
public void tree2List(List result,Map<String,Object> root){
//根据条件判断是否需要添加至列表
// if("Make".equals(root.get("makeBuy"))){
result.add(root);
// }
//没有子级
if(root.get("children") == null){
return;
}
//存在子级,递归调用
for(Map<String,Object> map: (List<Map<String,Object>>) root.get("children")){
this.tree2List(result,map);
}
}