实体
public class ProjectTree {
private String id;
private String name;
private String childrenId; //父节点该值为“0”,子节点该值为父节点id
private List<ProjectTree> children;
}
数据处理类
/ **
* 数据封装树结构
*/
private List<ProjectTree> tagConfTreeList(List<ProjectTree> projectTrees) {
List<ProjectTree> rootList = new ArrayList<>(); //根节点对象存放到这里
List<ProjectTree> bodyList = new ArrayList<>(); //其他节点存放到这里,可以包含根节点
for (ProjectTree projectTree : projectTrees) {
if (projectTree != null) {
if (projectTree.getChildrenId().equals("0")) {
rootList.add(projectTree);//所有父节点数据放进去
} else {
bodyList.add(projectTree); //其他节点数据也放进去
}
}
}
List<ProjectTree> stc = getTree(rootList, bodyList);//组装的树返给前端
return stc;
}
private List<ProjectTree> getTree(List<ProjectTree> rootList, List<ProjectTree> bodyList) {
if (bodyList != null && !bodyList.isEmpty()) {
//声明一个map,用来过滤已操作过的数据
Map<String, String> map = new Hashtable<>(bodyList.size());
rootList.forEach(beanTree -> getChild(beanTree, map, bodyList));
return rootList;
} else if (rootList != null) {
//当数据只有父节点
return rootList;
}
return null;
}
private void getChild(ProjectTree treeDto, Map<String, String> map, List<ProjectTree> bodyList) {
List<ProjectTree> childList = new ArrayList();
bodyList.stream()
.filter(c -> !map.containsKey(c.getId()))
.filter(c -> c.getChildrenId().equals(treeDto.getId()))
.forEach(c -> {
map.put(c.getId(), c.getChildrenId());
getChild(c, map, bodyList);
childList.add(c);
});
treeDto.setChildren(childList);//子数据集
}
结果
{
"data":{
"list":[
{
"id":"e26f114c01f211ebb9c10242ac110002",
"name":"测试1",
"childrenId":"0",
"children":[
]
},
{
"id":"f5a1d372009711ebb9c10242ac110002",
"name":"测试项目2",
"childrenId":"0",
"children":[
{
"id":"6f4edf65012711ebb9c10242ac110002",
"name":"测试项目1",
"childrenId":"f5a1d372009711ebb9c10242ac110002",
"children":[
]
},
{
"id":"1db20675009a11ebb9c10242ac110002",
"name":"测试项目2",
"childrenId":"f5a1d372009711ebb9c10242ac110002",
"children":[
]
},
{
"id":"cec3cdc9009911ebb9c10242ac110002",
"name":"测试项目3",
"childrenId":"f5a1d372009711ebb9c10242ac110002",
"children":[
]
}
]
}
]
}
}