java实现多级菜单(递归)

java实现多级菜单(递归)

查询菜单树:

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;
	}

猜你喜欢

转载自blog.csdn.net/weixin_43845335/article/details/89096395