用for循環構建樹

實體類java

    

public class TreeNode {


    private String id;
    private String name;
    private String parentId;
    private List<TreeNode> children;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public List<TreeNode> getChildren() {
        return children;
    }

    public void setChildren(List<TreeNode> children) {
        this.children = children;
    }

    public TreeNode() {
        super();
    }


}

  核心方法類node

public class TreeMain {
   public static void main(String[] args) {
        List<TreeNode> menuList = new ArrayList<TreeNode>();
          TreeNode t1 = new TreeNode();
           t1.setId("1");
          TreeNode t2 = new TreeNode();
           t2.setId("2");
          TreeNode t3 = new TreeNode();
           t3.setId("3");

          TreeNode t4 = new TreeNode();
           t4.setId("4");
           t4.setParentId("1");

          TreeNode t5 = new TreeNode();
           t5.setId("5");
           t5.setParentId("4");

          TreeNode tt5 = new TreeNode();
           tt5.setId("7");
           tt5.setParentId("4");

          TreeNode t6 = new TreeNode();
           t6.setId("6");
           t6.setParentId("2");

           menuList.add(t1);
           menuList.add(t2);
           menuList.add(t3);
           menuList.add(t4);
           menuList.add(t5);
           menuList.add(t6);
           menuList.add(tt5);
   List<TreeNode> nodeList = TreeMain.list2Tree(menuList);
    for (TreeNode t : nodeList) {
        if (t.getChildren() != null) {
            t.setChildren(null);
        }
    }
    System.out.println("nodeList:" + JSON.toJSONString(nodeList));
   }
  }
   
   //核心詭計
   public static List<TreeNode> list2Tree(List<TreeNode> menuList){
         List<TreeNode> nodeList = new ArrayList<TreeNode>();
          for(TreeNode node1 : menuList){
             boolean addTheNode = true;
             for(TreeNode node2 : menuList){
               if(node1.parent_id != null && node1.parent_id.equals(node2.id)){
                  addTheNode = false;
                  if(node2.getChildren() == null){
                  node2.setChildren(new ArrayList<TreeNode>());
                  }
                  node2.getChildren.add(node1);
               }
             }
             if(addTheNode){
             nodeList.add(node1);
             }
          }   
          return nodeList;
   }
}

  OK ,解釋一下樓上的代碼,main方法裏沒啥東西,主要是模擬從數據庫中load數據(數據必須包含id和pid),實體很定是本身建的,否則不會有children這個list。數據庫

  來看核心詭計,此方法中,把menuList中的數據所有都遍歷一遍,而後開始小蝌蚪找媽媽了——咱們只須要把,對應的子節點的實體添加進它父節點的children集合中,這樣不論有多少級數據,它們都只會找尋本身的父節點。若是打印出menuList就能夠看到所有的數據。最後只須要把沒父節點的節點,也就是樹的頂層抽出,這棵樹就已經構建起來了~。this

相關文章
相關標籤/搜索