Java递归应用:输出树形菜单

树节点类:
  1. package cn.com.tree;
  2. public class Node {
  3. private Integer id;
  4. private Integer parentId;
  5. private String name;
  6. private String link;
  7. public Integer getId() {
  8. return id;
  9. }
  10. public void setId(Integer id) {
  11. this.id = id;
  12. }
  13. public Integer getParentId() {
  14. return parentId;
  15. }
  16. public void setParentId(Integer parentId) {
  17. this.parentId = parentId;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public String getLink() {
  26. return link;
  27. }
  28. public void setLink(String link) {
  29. this.link = link;
  30. }
  31. }
输出树形菜单类:
  1. package cn.com.tree;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Tree {
  5. private StringBuffer html = new StringBuffer();
  6. private List<Node> nodes;
  7. public Tree(List<Node> nodes){
  8. this.nodes = nodes;
  9. }
  10. public String buildTree(){
  11. html.append( "<ul>");
  12. for (Node node : nodes) {
  13. Integer id = node.getId();
  14. if (node.getParentId() == null) {
  15. html.append( "\r\n<li id='" + id + "'>" + node.getName()+ "</li>");
  16. build(node);
  17. }
  18. }
  19. html.append( "\r\n</ul>");
  20. return html.toString();
  21. }
  22. private void build(Node node){
  23. List<Node> children = getChildren(node);
  24. if (!children.isEmpty()) {
  25. html.append( "\r\n<ul>");
  26. for (Node child : children) {
  27. Integer id = child.getId();
  28. html.append( "\r\n<li id='" + id + "'>" + child.getName()+ "</li>");
  29. build(child);
  30. }
  31. html.append( "\r\n</ul>");
  32. }
  33. }
  34. private List<Node> getChildren(Node node){
  35. List<Node> children = new ArrayList<Node>();
  36. Integer id = node.getId();
  37. for (Node child : nodes) {
  38. if (id.equals(child.getParentId())) {
  39. children.add(child);
  40. }
  41. }
  42. return children;
  43. }
  44. }

测试类:

  1. package zzj.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import cn.com.tree.Node;
  5. import cn.com.tree.Tree;
  6. public class Test {
  7. /**
  8. * @param args
  9. */
  10. public static void main(String[] args) {
  11. List<Node> nodes = new ArrayList<Node>();
  12. Node node1 = new Node();
  13. node1.setId( 1);
  14. node1.setName( "node1");
  15. node1.setParentId( null);
  16. node1.setLink( null);
  17. nodes.add(node1);
  18. Node node11 = new Node();
  19. node11.setId( 11);
  20. node11.setName( "node11");
  21. node11.setParentId( 1);
  22. node11.setLink( null);
  23. nodes.add(node11);
  24. Node node111 = new Node();
  25. node111.setId( 111);
  26. node111.setName( "node111");
  27. node111.setParentId( 11);
  28. node111.setLink( null);
  29. nodes.add(node111);
  30. Node node12 = new Node();
  31. node12.setId( 12);
  32. node12.setName( "node12");
  33. node12.setParentId( 1);
  34. node12.setLink( null);
  35. nodes.add(node12);
  36. Node node2 = new Node();
  37. node2.setId( 2);
  38. node2.setName( "node2");
  39. node2.setParentId( null);
  40. node2.setLink( null);
  41. nodes.add(node2);
  42. Node node21 = new Node();
  43. node21.setId( 21);
  44. node21.setName( "node21");
  45. node21.setParentId( 2);
  46. node21.setLink( null);
  47. nodes.add(node21);
  48. Node node3 = new Node();
  49. node3.setId( 3);
  50. node3.setName( "node3");
  51. node3.setParentId( null);
  52. node3.setLink( null);
  53. nodes.add(node3);
  54. Tree tree = new Tree(nodes);
  55. System.out.println(tree.buildTree());
  56. }
  57. }

输出:

<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>
浏览器效果:

猜你喜欢

转载自blog.csdn.net/xinzi11243094/article/details/80890229
今日推荐