JAVA树形结构

    科技2022-07-15  124

    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);//组装的树返给前端sb 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":[ ] } ] } ] } }
    Processed: 0.014, SQL: 8