N级菜单递归查询

	/** 将所有菜单组装成树
	 * @param classDTOList  数据库查询出来的所有菜单
	 *        菜单列表
	 * @return List<ClassDTO>
	 */
	private List<ClassDTO> assembleClassTree(List<ClassDTO> classDTOList) {
		List<ClassDTO> classTreeList = null;

		if(CommonUtils.listNotNull(classDTOList)){
			classTreeList = new ArrayList<ClassDTO>();

			for(ClassDTO classDTO1 : classDTOList){
				if(classDTO1.isLevel1()){
					this.setChildClass(classDTO1, classDTOList);
					classTreeList.add(classDTO1);
				}
			}
		}

		return classTreeList;
	}

	/** 通过递归的方法组装菜单树
	 * @param classDTO
	 * @param classDTOList
	 * @return
	 */
	private void setChildClass(ClassDTO parentClassDTO, List<ClassDTO> classDTOList) {
		List<ClassDTO> childClassList = parentClassDTO.getChildList();

		if(childClassList == null) {
			childClassList = new ArrayList<ClassDTO>();
			parentClassDTO.setChildList(childClassList);
		}

		for(ClassDTO childClassDTO : classDTOList ){
			if(parentClassDTO.getIdClass().equals(childClassDTO.getIdParentClass())){
				childClassList.add(childClassDTO);
				this.setChildClass(childClassDTO, classDTOList);
			}
		}
	}

  

  

/** 通过递归的方法取得parentId下的子集合
	 * @param parentId 父级Id
	 * @param allClassTree 菜单树状 集合
	 * @return
	 */
	private List<ClassDTO> getChildClassByParentId(String parentId, List<ClassDTO> allClassTree) {

		for (ClassDTO classDTO : allClassTree) {
			//找到parentId, 则返回此板块下的所有子版块集合
			if (classDTO.getIdClass().equals(parentId)) {
				return classDTO.getChildList();
			}
			//否则, 继续找
			else {
				List<ClassDTO> childList = classDTO.getChildList();

				if (CommonUtils.listNotNull(childList)) {
					childList = this.getChildClassByParentId(parentId, childList);

					if (childList != null) {
						return childList;
					}
					else {
						continue;
					}
				}
			}
		}

		return null;
	}

  

/**
	 *  给出一颗树 递归出其下所有叶子节点
	 * @param allTree  给出的树
	 * @param leafClassList   叶子节点
	 * @throws BusinessServiceException
	 */
	private void loopLeafClassListByTree(List<ClassDTO> allTree, List<ClassDTO> leafClassList){
		if(CommonUtils.listNotNull(allTree)){
			for (ClassDTO classDTO : allTree) {
				if (classDTO.isLeafClass()) {
					leafClassList.add(classDTO);
				}
				else {
					List<ClassDTO> childClassList = classDTO.getChildList();
					if (CommonUtils.listNotNull(childClassList)) {
						this.loopLeafClassListByTree(childClassList, leafClassList);
					}
				}
			}
		}
	}

  

时间: 2024-10-01 06:26:11

N级菜单递归查询的相关文章

[伪] 级联菜单,两级菜单

[伪] 级联菜单,两级菜单 这段时间需要做一个类似效果的一个菜单样式,所以就查了各种文档,各种百度各种搜索,的确也是搜到了不少的第三方组件,比如(CascadingMenuViewLib)就是其中一个,但是,我脑子笨,研究了3天左右的时间,改不成我需要得样子,So...我用我自己的方式,实现了这个效果(对了,还没有完全实现,因为TextView被点中的样式我还没有设置,不过这都是小事情了..) 在这里,我提供一个思路,代码很简单,当然,我也会附一些上来,好的,我首先说一下思路 首先,我们的xml

【锋利的JQuery-学习笔记】菜单栏及其2级菜单

效果图: 鼠标移动到菜单项后如下: html: <div id="nav" class="mainNav"> <ul class="nav"> <li><a href="#">首 页</a></li> <li><a href="#">品 牌</a> <div class="jnNav&

DIV+CSS布局重新学习之css控制ul li实现2级菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

3级菜单

<html> <head> <title></title> <meta charset="utf-8"> <style> *{ margin:0; padding:0; } ul{ list-style: none; } body{ background: #f5f5f5; font-family: "Microsoft YaHei"; font-size: 12px; } .wrap{ wid

MFC 对话框中动态创建N级菜单以及响应事件

创建一个基于对话框的工程,工程名为CreateMenu 为该对话框增加一个文件菜单项和测试菜单项,如下图所示   测试菜单项至少要有一个子菜单项 在对话框属性中关联该菜单 在resource.h中增加一个ID_TESTMENU宏 #define ID_TESTMENU          5000 在对话框中添加一个Button按钮,建立消息映射,编辑代码如下 void CCreateMenuDlg::OnButton1() { // TODO: Add your control notifica

原生JS实现N级菜单

需求分析 简单的分析一下,要实现N级菜单,首先从布局入手,即判断是否有下级菜单 没有下一级菜单,直接排列 有下级菜单,又分为下级菜单排放位置,和在上级菜单显示类似 '>' 的符号,效果如图: 图:1 初步实现 1.实现是否存在   > 注意: 下面凡是担忧 xxx===yyy ? xxx : xxx都是利用三元表达式,来表达思路. HTML结构如下: 图:2 要实现图一的效果,我们只需要判断li标签里面的children.length===2 ? 'span存在' : 'span移除' 2.下

python练习_module01-1-3级菜单_2

3级菜单的另一种实现方式:循环 函数的方式:http://www.cnblogs.com/jailly/p/6709573.html 1.先创建一个能够表明3级目录结构之间映射关系的字典,然后将其存入一个pickle文件以便调用 1 import pickle 2 3 dir_windows = ['explorer.exe'] 4 part_C = {'windows': dir_windows} 5 6 dir_setup = ['rhel-7.3.iso', 'SecureCRT6.rar

(转)asp.net(C#)手记之Repeater与两级菜单

先来张图片说明下我们要实现的菜单: 这个菜单只实现了2级哈. 我采用的方法是嵌套2个Repeater. 先看下数据库中的表结构: 数据: 上代码: aspx: <asp:Repeater ID="rptMenus" runat="server" onitemdatabound="rptMenus_ItemDataBound"> <HeaderTemplate> <ul class="mnuLevel01&q

python-实现3级菜单(作业课)

1 #任务: 2 #显示3级菜单 3 #1级菜单#显示 3个城市 => 1北京 2上海 3广州 4 #2级菜单 #显示 选择1 北京 => B1 B2 B3 5 #2级菜单 #显示 选择2 上海 => S1 S2 S3 6 #2级菜单 #显示 选择3 广州 => G1 G2 G3 7 8 #3级菜单 #显示 选择B1 => b1_1 b1_2 b1_3 9 #3级菜单 #显示 选择B2 => b2_1 b2_2 b2_3 10 #3级菜单 #显示 选择B3 =>