import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 树形菜单demo * @author Jason * @date */ public class TreeMain { private List<Menu> menus; public TreeMain() { menus = new ArrayList<Menu>(); Menu menu = new Menu(); menu.setId("1"); menu.setName("一级菜单A"); menu.setParentId(null); menus.add(menu); Menu menu2 = new Menu(); menu2.setId("2"); menu2.setName("一级菜单B"); menu2.setParentId(null); menus.add(menu2); Menu menu3 = new Menu(); menu3.setId("3"); menu3.setName("一级菜单C"); menu3.setParentId(null); menus.add(menu3); Menu menu4 = new Menu(); menu4.setId("4"); menu4.setName("一级菜单A__1"); menu4.setParentId("1"); menus.add(menu4); Menu menu5 = new Menu(); menu5.setId("5"); menu5.setName("一级菜单A__2"); menu5.setParentId("1"); menus.add(menu5); Menu menu6 = new Menu(); menu6.setId("6"); menu6.setName("二级菜单A__1"); menu6.setParentId("2"); menus.add(menu6); Menu menu7 = new Menu(); menu7.setId("7"); menu7.setName("二级菜单A__2"); menu7.setParentId("2"); menus.add(menu7); Menu menu8 = new Menu(); menu8.setId("8"); menu8.setName("二级菜单A__3"); menu8.setParentId("2"); menus.add(menu7); } public static void main(String[] args) { TreeMain main = new TreeMain(); main.buildTree(); } public void buildTree(){ Map<Menu, List<Menu>> menuMap = new HashMap<Menu, List<Menu>>(); for (Menu menu : menus) { if (menu.getParentId() == null) { List<Menu> menuList = build(menu); menuMap.put(menu, menuList); } } for (Map.Entry<Menu, List<Menu>> entry : menuMap.entrySet()) { System.out.println("=="+entry.getKey().getName()); for(Menu menu :entry.getValue()) { System.out.println("----"+menu.getName()); } } } /** * 递归遍历菜单 * @param menu * @return */ private List<Menu> build(Menu menu){ List<Menu> menuList = new ArrayList<Menu>(); List<Menu> children = getChildren(menu); if (!children.isEmpty()) { for (Menu child : children) { //String id = child.getId(); menuList.add(child); //build(child); } } return menuList; } private List<Menu> getChildren(Menu menu){ List<Menu> children = new ArrayList<Menu>(); String id = menu.getId(); for (Menu child : menus) { if (id.equals(child.getParentId())) { //获取子菜单 children.add(child); } } return children; } }
输出结果:
==一级菜单A ----一级菜单A__1 ----一级菜单A__2 ==一级菜单B ----二级菜单A__1 ----二级菜单A__2 ----二级菜单A__2 ==一级菜单C
相关推荐
本文将详细讲解如何使用递归方法创建一个无限级的树形菜单,特别适合初学者掌握。 首先,我们要理解树形菜单的基本概念。树形菜单是由节点(节点通常代表一个菜单项)组成的,每个节点可以有零个或多个子节点,形成...
开发者可以使用Freemarker语法定义动态内容,如树形菜单的数据,这些数据由后端Spring或Struts2处理并传递给前端。 然后是“jquery”,这是一个广泛使用的JavaScript库,提供了丰富的API用于操作DOM(文档对象模型...
本示例主要讲解如何使用递归在Java中构建并输出树形菜单。树形菜单通常用于表示层次结构,例如网站导航或文件系统。下面我们将详细分析给定的代码,并解释其工作原理。 首先,我们需要创建一个表示树节点的类`Node`...
在本场景中,我们关注的是如何使用jQuery实现一个具有多选功能的树形菜单,并获取用户所选的值。jQuery是一个轻量级、高性能的JavaScript库,简化了DOM操作、事件处理、动画以及Ajax交互等任务。 首先,我们需要一...
5. **递归函数**:在ASP中构建无限层级的树形菜单,通常会用到递归函数。递归函数会调用自身,每次处理一个父节点及其子节点,直到所有层级都被遍历完毕。 6. **缓存策略**:对于大型目录结构,为了提高性能,可能...
多级菜单递归遍历成树实现//获取全部page//递归输出outpage(页面菜单)//一级菜单 0 null//为一级菜单设置子菜单//递归调用//子菜单//遍
此外,文章提到了一些相关资源,包括使用PHP实现的树形结构数据存取类、ThinkPHP框架中的递归循环输出无限级分类、PHP无限分类的深入分析等,这些都是扩展和优化树形菜单实现的好参考资料。 总结来说,这个实例展示...
这个方法通常接收一个菜单列表(根据数据库查询结果),然后通过递归的方式将菜单组织成树形结构: ```java import java.util.ArrayList; import java.util.List; public class MenuTreeBuilder { public static...
总结来说,“xsl递归解析xml”是将XML数据通过XSLT转换成其他格式的过程,其中递归模板是处理XML树形结构的关键。这个过程可以与JavaScript和HTML结合,实现动态交互式的数据展示。了解并掌握这一技术,对于开发处理...
3. **生成树形下拉**:有了层级结构后,可以使用递归函数来生成HTML的下拉菜单。每个分类节点将包含其所有子节点,递归结束时,将形成一个完整的下拉菜单结构。 4. **面包屑导航**:面包屑导航的生成同样基于分类的...
在构建动态树时,递归算法可以从根节点开始,遍历数据库中的所有节点,根据PID判断子节点并构建树形结构。 首先,定义一个Java类`TreeManager`,它包含了两个关键方法:`getAllNods()`用于从数据库获取所有节点信息...
在处理 HTML 表格时,有时我们需要遍历表格的行(tr)并找到它们的子节点,例如在实现树形结构或者进行复杂的表格操作时。本篇文章将深入探讨如何使用 jQuery 实现递归地获取表格 tr 子节点的方法。 首先,我们需要...
为了更好地理解Oracle中的递归查询,我们首先需要创建一张表格来存储一个简单的树形结构。下面是一张名为`TEST_TREE`的表,包含以下列: - `ID`: 主键,标识每个节点。 - `PID`: 父节点ID,表示当前节点的上一级...
在树形论坛中,这需要实现递归或迭代的逻辑,正确地构建出层级结构。 6. **用户交互**:包括表单提交、按钮点击事件处理、分页功能、搜索功能等,这些都需要用到JavaScript和HTML的交互。 7. **安全性**:考虑到SQL...
本文将深入探讨如何使用Java实现一个支持多级菜单的树形菜单。 首先,我们需要定义一个表示菜单的实体类`Menu`。这个类通常包含菜单的基本属性,如菜单ID(`id`)、菜单名称(`name`)、父菜单ID(`parentId`)、...
ASP递归无限级分类源码是一...这样的源码对于初学者来说是一个很好的学习实例,可以帮助他们理解如何在ASP中实现递归以及如何处理树形数据结构。而对于经验丰富的开发者,它可以作为一个快速实现无限级分类功能的基础。
在MySQL数据库中,处理树形结构的数据是一项常见的任务,特别是在构建层级关系如组织架构、菜单系统或者分类目录时。本文将深入探讨如何在MySQL中查询树形结构的全部子项列表,结合提供的`MySql_Link_Function.sql`...
本篇文章将详细解析如何使用递归CTE查询树型结构,并通过一个Family Tree的例子来演示具体的应用。 首先,我们来看一下创建Family Tree的示例数据。定义了一个名为@TT的临时表,它包含了家族成员的信息,包括ID...
一般情况下,我们会使用链表或树形结构来存储数据,并通过递归或迭代的方式遍历整个树。在本案例中,每个节点可能包含一个图标,这需要我们在自定义标签中处理节点渲染时,根据节点的状态或属性来决定显示哪个图标。...
这时,可以考虑改用迭代或其他非递归策略,如使用队列进行广度优先搜索(BFS)或使用堆栈进行深度优先搜索(DFS)。 总之,遍历多级树状JSON是一个常见的编程挑战,通过理解和运用递归,我们可以有效地处理这类问题...