`

使用递归输出树形菜单

    博客分类:
  • java
阅读更多
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

 

 

分享到:
评论

相关推荐

    treeview递归无限级树形菜单(递归方式)

    本文将详细讲解如何使用递归方法创建一个无限级的树形菜单,特别适合初学者掌握。 首先,我们要理解树形菜单的基本概念。树形菜单是由节点(节点通常代表一个菜单项)组成的,每个节点可以有零个或多个子节点,形成...

    s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单.rar

    开发者可以使用Freemarker语法定义动态内容,如树形菜单的数据,这些数据由后端Spring或Struts2处理并传递给前端。 然后是“jquery”,这是一个广泛使用的JavaScript库,提供了丰富的API用于操作DOM(文档对象模型...

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

    本示例主要讲解如何使用递归在Java中构建并输出树形菜单。树形菜单通常用于表示层次结构,例如网站导航或文件系统。下面我们将详细分析给定的代码,并解释其工作原理。 首先,我们需要创建一个表示树节点的类`Node`...

    树形菜单,选择获取选择的值,多选

    在本场景中,我们关注的是如何使用jQuery实现一个具有多选功能的树形菜单,并获取用户所选的值。jQuery是一个轻量级、高性能的JavaScript库,简化了DOM操作、事件处理、动画以及Ajax交互等任务。 首先,我们需要一...

    asp无极树形菜单11

    5. **递归函数**:在ASP中构建无限层级的树形菜单,通常会用到递归函数。递归函数会调用自身,每次处理一个父节点及其子节点,直到所有层级都被遍历完毕。 6. **缓存策略**:对于大型目录结构,为了提高性能,可能...

    huzy123#knowledge-doc#多级菜单递归遍历成树1

    多级菜单递归遍历成树实现//获取全部page//递归输出outpage(页面菜单)//一级菜单 0 null//为一级菜单设置子菜单//递归调用//子菜单//遍

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

    此外,文章提到了一些相关资源,包括使用PHP实现的树形结构数据存取类、ThinkPHP框架中的递归循环输出无限级分类、PHP无限分类的深入分析等,这些都是扩展和优化树形菜单实现的好参考资料。 总结来说,这个实例展示...

    java实现递归菜单树

    这个方法通常接收一个菜单列表(根据数据库查询结果),然后通过递归的方式将菜单组织成树形结构: ```java import java.util.ArrayList; import java.util.List; public class MenuTreeBuilder { public static...

    xsl递归解晰xml

    总结来说,“xsl递归解析xml”是将XML数据通过XSLT转换成其他格式的过程,其中递归模板是处理XML树形结构的关键。这个过程可以与JavaScript和HTML结合,实现动态交互式的数据展示。了解并掌握这一技术,对于开发处理...

    PHP项目中用到无限极导航,面包屑最精简递归输出

    3. **生成树形下拉**:有了层级结构后,可以使用递归函数来生成HTML的下拉菜单。每个分类节点将包含其所有子节点,递归结束时,将形成一个完整的下拉菜单结构。 4. **面包屑导航**:面包屑导航的生成同样基于分类的...

    web中用静态树和递归算法制作动态树

    在构建动态树时,递归算法可以从根节点开始,遍历数据库中的所有节点,根据PID判断子节点并构建树形结构。 首先,定义一个Java类`TreeManager`,它包含了两个关键方法:`getAllNods()`用于从数据库获取所有节点信息...

    jquery实现递归tr子节点

    在处理 HTML 表格时,有时我们需要遍历表格的行(tr)并找到它们的子节点,例如在实现树形结构或者进行复杂的表格操作时。本篇文章将深入探讨如何使用 jQuery 实现递归地获取表格 tr 子节点的方法。 首先,我们需要...

    Oracle递归查询

    为了更好地理解Oracle中的递归查询,我们首先需要创建一张表格来存储一个简单的树形结构。下面是一张名为`TEST_TREE`的表,包含以下列: - `ID`: 主键,标识每个节点。 - `PID`: 父节点ID,表示当前节点的上一级...

    PHP4.3树形论坛

    在树形论坛中,这需要实现递归或迭代的逻辑,正确地构建出层级结构。 6. **用户交互**:包括表单提交、按钮点击事件处理、分页功能、搜索功能等,这些都需要用到JavaScript和HTML的交互。 7. **安全性**:考虑到SQL...

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

    本文将深入探讨如何使用Java实现一个支持多级菜单的树形菜单。 首先,我们需要定义一个表示菜单的实体类`Menu`。这个类通常包含菜单的基本属性,如菜单ID(`id`)、菜单名称(`name`)、父菜单ID(`parentId`)、...

    ASP递归无限级分类源码

    ASP递归无限级分类源码是一...这样的源码对于初学者来说是一个很好的学习实例,可以帮助他们理解如何在ASP中实现递归以及如何处理树形数据结构。而对于经验丰富的开发者,它可以作为一个快速实现无限级分类功能的基础。

    MySql 中查询树形结构的全部子项列表 Function

    在MySQL数据库中,处理树形结构的数据是一项常见的任务,特别是在构建层级关系如组织架构、菜单系统或者分类目录时。本文将深入探讨如何在MySQL中查询树形结构的全部子项列表,结合提供的`MySql_Link_Function.sql`...

    使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法

    本篇文章将详细解析如何使用递归CTE查询树型结构,并通过一个Family Tree的例子来演示具体的应用。 首先,我们来看一下创建Family Tree的示例数据。定义了一个名为@TT的临时表,它包含了家族成员的信息,包括ID...

    遍历多级树状json获得父子节点值

    这时,可以考虑改用迭代或其他非递归策略,如使用队列进行广度优先搜索(BFS)或使用堆栈进行深度优先搜索(DFS)。 总之,遍历多级树状JSON是一个常见的编程挑战,通过理解和运用递归,我们可以有效地处理这类问题...

    JSP自定义标签 无限级树-支持各节点图标自定义

    一般情况下,我们会使用链表或树形结构来存储数据,并通过递归或迭代的方式遍历整个树。在本案例中,每个节点可能包含一个图标,这需要我们在自定义标签中处理节点渲染时,根据节点的状态或属性来决定显示哪个图标。...

Global site tag (gtag.js) - Google Analytics