菜单树形显示

本文介绍了在后台管理系统中,菜单树形结构展示的三种常见实现方法:1) 使用for循环和递归判断父id;2) 利用Map和Stream流处理;3) SQL的递归函数。详细步骤包括查询所有菜单,通过递归封装成树形结构,并重点讲解了如何在父菜单中添加子菜单的逻辑,以及递归终止条件。通过这些方法,可以有效地组织和展示层级菜单数据。
摘要由CSDN通过智能技术生成

菜单树形显示的三种方式

1.for()递归,入口一级分类,递归终止条件(父菜单id = 子菜单的父id)常用
2.map stream流
3.sql 的 递归函数

步骤

1.查询出所有菜单 menuList
	public List<Category> treeList() {
   		//查询出所有分类
    	List<Category> categoryList = categoryMapper.getCategoryList();

    	//将所有分类,按照要求封装后返回
   		List<Category> categoryTree = buildTree(categoryList);
    	return categoryTree;
	}
2.封装menuList 返回treeList-->返回前端
	private List<Category> buildTree(List<Category> categoryList){
        //创建用于封装最后数据的list集合
        List<Category> categoryTree = new ArrayList<>();

        //遍历categoryList ,找出一级分类
        for (Category category : categoryList) {
            if(category.getParentCid().equals(new Long(0))){
                categoryTree.add(setChildren(category,categoryList));
        	}
       	}
        return categoryTree;
	}
3.向父菜单封装子菜单列表
	private Category setChildren(Category oneCategory,List<Category> categoryList){
        //1 因为向一层菜单里面放二层菜单,二层里面还要放三层,把对象初始化
        oneCategory.setCategoryList(new ArrayList<Category>());

        //遍历categoryList找出一级分类的子分类
        for (Category category : categoryList) {
            if(oneCategory.getCatId().equals(category.getParentCid())){
                oneCategory.getCategoryList().add(setChildren(category,categoryList));
            }
        }
        return oneCategory;
}

4.三个方法的注意点:
	1.menuList从第一个函数一直往下传,只用这一个
	2.递归封装子菜单的入口是 一级菜单
	3.setChildren(Menu m,List<MenuList>)中,开始得将menu 的 子菜单menuList赋初始值,因为后面得调用menu.getMenuList().add(),避免null指针异常

递归的结束条件 就是 id != parent_id 即 此实体不是任何 实体的 parent了,即此实体没有儿子了,到最低了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值