Java递归如何正确输出树形菜单

本文实例为大家分享了java递归输出树形菜单的具体代码,供大家参考,具体内容如下

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

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)

相关推荐

  • Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示: //菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); int menuId = jsonMenu.ge

  • QQ好友列表树形列表java代码实现代码

    以前在网上瞎转悠的时候就发现很多人为用Java实现QQ登陆后的面板的问题感到十分头疼,最近我因在写模拟QQ的项目,故不可或缺的遇到了这一个问题,在网上我google了,百度了,最终发现的是有很多人被这一问题困扰,却没有解决的方案,估计是那些写出来了的人,没有发布到网上来,如今,经过自己的多方面查找资料,终于把他写出来了,也不枉昨晚熬夜了,呵呵,好了先让我们来看看实现的效果截图: 好了,效果就是这样了,虽然实现了基本功能,但是还是不完美,比如说好友面板不能随着窗口改变大小而改变,不过应该已经可以解

  • Java树形菜单的创建

    功能:实现创建一个树形菜单 说明:创建树形菜单结构与创建菜单栏类似,是按层次与模型创建的. 通过DefaultMutableTreeNode类创建根节点.子节点和孙节点对象,再通过DefaultTreeModel 类利用根节点创建树模型对象,然后通过treeModel.insertNodeInto方法将节点对象插入树模型中. 效果图: 代码: import java.awt.*; import javax.swing.*; import javax.swing.tree.*; import ja

  • Java创建树形结构算法实例代码

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBean import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import j

  • java、js中实现无限层级的树形结构方法(类似递归)

    js中: var zNodes=[ {id:0,pId:-1,name:"Aaaa"}, {id:1,pId:0,name:"A"}, {id:11,pId:1,name:"A1"}, {id:12,pId:1,name:"A2"}, {id:13,pId:1,name:"A3"}, {id:2,pId:0,name:"B"}, {id:21,pId:2,name:"B1&qu

  • JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现

    在网站开发中经常遇到级联数据的展示,比如选择城市的时候弹出的省市县选择界面.很多前端制作人员习惯于从JSON中而不是从数据库中获取省市县数据.那么在选择了省市县中的某一个城市 ,存储到数据库中需要存储所选城市的代码.所以需要一个能将JSON数据(一般存储在javascript脚本中)结构全部导入到数据库中的功能. JSON的特点是支持层级结构.支持数组表示的对象 .下面的示例介绍如何将JSON的省市县数据保存到数据库中,实现原理非常简单,就是利用JSON的java工具包API,将层次结构的JSO

  • Java遍历输出指定目录、树形结构所有文件包括子目录下的文件

    下面通过一段代码介绍下Java输出指定目录.树形结构下的所有文件包括子目录中的文件的方法,并附有效果图. import java.io.File; public class ReadDirectory { // 文件所在的层数 private int fileLevel; /** * 生成输出格式 * @param name 输出的文件名或目录名 * @param level 输出的文件名或者目录名所在的层次 * @return 输出的字符串 */ public String createPri

  • Java easyui树形表格TreeGrid的实现代码

    自己搞了一下午,终于用JAVA实现了数据网格.记录一下实现的代码.(PS:此处的easyui是1.5版本,楼主只贴了核心的代码) 实现图 JSP页面 <head> //权限列表 $( document ).ready(function(){ var parentId = 0; $('#tt').treegrid({ url:'queryPrivilege.action?parentId='+parentId, idField:'id', treeField:'RecordStatus', co

  • Java递归如何正确输出树形菜单

    本文实例为大家分享了java递归输出树形菜单的具体代码,供大家参考,具体内容如下 首先我们要建立树节点的类: 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) {

  • 基于递归实现的php树形菜单代码

    本文实例讲述了基于递归实现的php树形菜单代码.分享给大家供大家参考.具体实现方法如下: 开发电子商务网站的时候,做了这个显示树形菜单的功能,用的递归实现的PHP树形菜单函数.具体代码如下: 复制代码 代码如下: public function procCategory($sid,$pid){ $return = array(); $key = 0; static $arr = array(); //分类级别参考数组 $sql =  "select cid,pcid,name from shop

  • java实现构造无限层级树形菜单

    这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了. 我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是 1.构造一个实体类,用来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList) 2.构造菜单结构 3.构造子菜单,如此循环,通过pid判断上级菜单 具体实现: 1.这里构造Tree.java实体类 package com.tcl.jr.crm.entity; /** * 类名称:Tree * 类描述:树形结构 */

  • JAVA递归生成树形菜单的实现过程

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”. 首先,编写数据模型Menu.每条菜单有自己的id.父节点parentId.菜单名称text.菜单还拥有次级菜单children. import java.util.List; public class Menu { private String id;

  • java利用递归调用实现树形菜单的样式

    一:需求 现有以需求就是把某一个帖子的全部评论展示出来. 二:分析 关于对帖子的评论分为主评论和子评论,主评论就是对帖子的直接评论,子评论就是对评论的评论. 三:思路 先获取某一个帖子的全部主评论,递归判断是否有子评论,获取子评论. 递归本质:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调 用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模

  • Java构建树形菜单的实例代码(支持多级菜单)

    效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> children;

  • java编程两种树形菜单结构的转换代码

    首先看看两种树形菜单结构的代码示例. SingleTreeNode: package com.zzj.tree; public class SingleTreeNode { private int id; private int pId; private String name; public SingleTreeNode() { } public SingleTreeNode(int id, int pId, String name) { this.id = id; this.pId = pI

  • Vue.js递归组件构建树形菜单

    在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself!--> <recursive-component></recursive-component> }); 递归组件常用于在blog上显示注释.嵌套的菜单,或者基本上是父和子相同的类型,尽管具体内容不同.例如: 现在给您演示一下如何有效地使用递归组件,我将通过建立一个可扩展/收缩的树形菜

  • 用 Vue.js 递归组件实现可折叠的树形菜单(demo)

    在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself!--> <recursive-component></recursive-component>` }); 递归组件常用于在blog上显示注释.嵌套的菜单,或者基本上是父和子相同的类型,尽管具体内容不同.例如: 现在给您演示一下如何有效地使用递归组件,我将通过建立一个可扩展/收缩的树形

随机推荐