java实现多级菜单(java递归)方法一

本文介绍了如何通过Java代码实现菜单信息的查询与递归处理,展示了如何从数据库中获取所有菜单,筛选根节点,并利用递归功能为每个根节点填充子菜单。核心在于理解父子关系和列表操作在菜单系统的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询菜单树

public List<Map<String, Object>> queryCategoryInfo() {
		List<Map<String, Object>> allMenu = queryAllCategory();
	      //根节点
	      List<Map<String, Object>> rootMenu = new ArrayList<Map<String, Object>>();
	      for (Map<String, Object> nav : allMenu) {
	    	String parentId = String.valueOf(nav.get("parent_id"));
	        if(parentId.equals("0")){//父节点是0的,为根节点。
	          rootMenu.add(nav);
	        }
	      }
	      /* 根据Menu类的order排序 */
//	      Collections.sort(rootMenu, order());
	      //为根菜单设置子菜单,getClild是递归调用的
	      for (Map<String, Object> nav : rootMenu) {
	        /* 获取根节点下的所有子节点 使用getChild方法*/
	    	String id = String.valueOf(nav.get("category_id"));
	        List<Map<String, Object>> childList = getChild(id, allMenu);
//	        nav.setChildren(childList);//给根节点设置子节点
	        nav.put("child", childList);
	      }
		
		
		return rootMenu;
	}
/**
	 * 	获取子节点
	 * @param id 父节点id
	 * @param allMenu 所有菜单列表
	 * @return 每个根节点下,所有子菜单列表
	 */
	private List<Map<String, Object>> getChild(String id,List<Map<String, Object>> allMenu){
	    //子菜单
		List<Map<String, Object>> childList = new ArrayList<Map<String, Object>>();
		for (Map<String, Object> nav : allMenu) {
			// 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
			//相等说明:为该根节点的子节点。
			String parentId = String.valueOf(nav.get("parent_id"));
			if(id.equals(parentId)){
				childList.add(nav);
			}
		}
		//递归
		for (Map<String, Object> nav : childList) {
			String tempId = String.valueOf(nav.get("category_id"));
			//nav.setChildren(,getChild(tempId, allMenu));
			nav.put("child", getChild(tempId, allMenu));
		}
		//Collections.sort(childList,order());//排序
		//如果节点下没有子节点,返回一个空List(递归退出)
	    if(childList.size() == 0){
	      return new ArrayList<Map<String, Object>>();
	    }
	    return childList;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪只怪满眼尽是人间烟火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值