树形结构递归

  • 节点
import lombok.Data;
import java.util.List;

@Data
public class AreaNode {
    
    

    private String code;

    private String name;

    private String parentCode;

    private List<AreaNode> subsets;

}
  • 树形
import net.sf.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class AreaTree {
    
    

    private List<AreaNode> areaList = new ArrayList<AreaNode>();

    public AreaTree(List<AreaNode> areaList) {
    
    
        this.areaList = areaList;
    }

    //建立树形结构
    public List<AreaNode> builTree() {
    
    
        List<AreaNode> treeMenus = new ArrayList<AreaNode>();
        for (AreaNode menuNode : getRootNode()) {
    
    
            menuNode = buildChilTree(menuNode);
            treeMenus.add(menuNode);
        }
        return treeMenus;
    }

    //获取根节点
    private List<AreaNode> getRootNode() {
    
    
        List<AreaNode> rootAreaLists = new ArrayList<AreaNode>();
        for (AreaNode areaNode : areaList) {
    
    
            if (areaNode.getParentCode() == null) {
    
    
                rootAreaLists.add(areaNode);
            }
        }
        return rootAreaLists;
    }

    //递归,建立子树形结构
    private AreaNode buildChilTree(AreaNode parentNode) {
    
    
        List<AreaNode> childNodes = new ArrayList<>();
        for (AreaNode areaNode : areaList) {
    
    
            if (Objects.equals(areaNode.getParentCode(), parentNode.getCode())) {
    
    
                childNodes.add(buildChilTree(areaNode));
            }
        }
        parentNode.setSubsets(childNodes);
        return parentNode;
    }

    public static void main(String[] args) {
    
    
        List<AreaNode> nodes = new ArrayList<>();
        AreaNode node1 = new AreaNode();
        node1.setCode("1");
        node1.setName("node1");
        AreaNode node2 = new AreaNode();
        node2.setCode("2");
        node2.setName("node2");
        node2.setParentCode("1");
        AreaNode node3 = new AreaNode();
        node3.setCode("3");
        node3.setName("node3");
        node3.setParentCode("2");
        nodes.add(node1);
        nodes.add(node2);
        nodes.add(node3);
        List<AreaNode> nodeList = new ArrayList<>();
        AreaTree areaTree = new AreaTree(nodes);
        nodeList = areaTree.builTree();
        JSONArray object = JSONArray.fromObject(nodeList);
        System.out.println(object.toString());
    }

}
  • 打印结果
[
    {
    
    
        "code": "1",
        "name": "node1",
        "parentCode": "",
        "subsets": [
            {
    
    
                "code": "2",
                "name": "node2",
                "parentCode": "1",
                "subsets": [
                    {
    
    
                        "code": "3",
                        "name": "node3",
                        "parentCode": "2",
                        "subsets": [
                            
                        ]
                    }
                ]
            }
        ]
    }
]

猜你喜欢

转载自blog.csdn.net/qq_40977118/article/details/116303095