【Java递归】如何输出树形菜单

来源:互联网 发布:linux mysql 服务 编辑:程序博客网 时间:2024/06/15 16:05

首先我们要建立树节点的类:

package com.tree;    public class Node {      private Integer id;      private Integer parentId;      private String name;      private String link;            public Integer getId() {          return id;      }      public void setId(Integer id) {          this.id = id;      }      public Integer getParentId() {          return parentId;      }      public void setParentId(Integer parentId) {          this.parentId = parentId;      }      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getLink() {          return link;      }      public void setLink(String link) {          this.link = link;      }  }  
输出树形菜单类:

package com.tree;    import java.util.ArrayList;  import java.util.List;    public class Tree {      private StringBuffer html = new StringBuffer();      private List<Node> nodes;            public Tree(List<Node> nodes){          this.nodes = nodes;      }            public String buildTree(){          html.append("<ul>");          for (Node node : nodes) {              Integer id = node.getId();              if (node.getParentId() == null) {                  html.append("\r\n<li id='" + id + "'>" + node.getName()+ "</li>");                  build(node);              }          }          html.append("\r\n</ul>");          return html.toString();      }            private void build(Node node){          List<Node> children = getChildren(node);          if (!children.isEmpty()) {              html.append("\r\n<ul>");              for (Node child : children) {                  Integer id = child.getId();                  html.append("\r\n<li id='" + id + "'>" + child.getName()+ "</li>");                  build(child);              }              html.append("\r\n</ul>");          }       }            private List<Node> getChildren(Node node){          List<Node> children = new ArrayList<Node>();          Integer id = node.getId();          for (Node child : nodes) {              if (id.equals(child.getParentId())) {                  children.add(child);              }          }          return children;      }  }  
然后我们来测试一下:
import java.util.ArrayList;  import java.util.List;    import cn.com.tree.Node;  import cn.com.tree.Tree;      public class Test {        /**      * @param args      */      public static void main(String[] args) {          List<Node> nodes = new ArrayList<Node>();                    Node node1 = new Node();          node1.setId(1);          node1.setName("node1");          node1.setParentId(null);          node1.setLink(null);          nodes.add(node1);                    Node node11 = new Node();          node11.setId(11);          node11.setName("node11");          node11.setParentId(1);          node11.setLink(null);          nodes.add(node11);                    Node node111 = new Node();          node111.setId(111);          node111.setName("node111");          node111.setParentId(11);          node111.setLink(null);          nodes.add(node111);                    Node node12 = new Node();          node12.setId(12);          node12.setName("node12");          node12.setParentId(1);          node12.setLink(null);          nodes.add(node12);                    Node node2 = new Node();          node2.setId(2);          node2.setName("node2");          node2.setParentId(null);          node2.setLink(null);          nodes.add(node2);                    Node node21 = new Node();          node21.setId(21);          node21.setName("node21");          node21.setParentId(2);          node21.setLink(null);          nodes.add(node21);                    Node node3 = new Node();          node3.setId(3);          node3.setName("node3");          node3.setParentId(null);          node3.setLink(null);          nodes.add(node3);                    Tree tree = new Tree(nodes);          System.out.println(tree.buildTree());      }  }  

输出的结果:

<ul><li id='1'>node1</li><ul><li id='11'>node11</li><ul><li id='111'>node111</li></ul><li id='12'>node12</li></ul><li id='2'>node2</li><ul><li id='21'>node21</li></ul><li id='3'>node3</li></ul>


浏览器效果:



0 0
原创粉丝点击