JAVA树形结构

JAVA 把一个List转成树形结构

实体

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":[

                        ]
                    }
                ]
            }
        ]
    }
}

版权声明:本文为weixin_45353083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。