素材巴巴 > 程序开发 >

如何优雅的编写树形结构的菜单栏

程序开发 2023-09-06 08:25:07

模拟数据:

数据库数据:

 对应的实体:

package com.luck.bookstore.product.entity;import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
 import java.util.Date;
 import java.util.List;import lombok.Data;/*** 商品三级分类*/
 @Data
 @TableName("pms_category")
 public class CategoryEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 分类id*/@TableIdprivate Long catId;/*** 分类名称*/private String name;/*** 父分类id*/private Long parentCid;/*** 层级*/private Integer catLevel;/*** 是否显示[0-不显示,1显示]*/private Integer showStatus;/*** 排序*/private Integer sort;/*** 图标地址*/private String icon;/*** 计量单位*/private String productUnit;/*** 商品数量*/private Integer productCount;/*** 子分类*/@TableField(exist = false)private List children;}
 

目的要求:

获取到树形结构的数据(如下图当当网的菜单)

 实操内容:

    public List listWithTree() {//1.查出所有分类List entities = baseMapper.selectList(null);//2.组装成父子的树形结构//2.1找到所有的一级分类List level1Menus = entities.stream().filter((categoryEntity ->categoryEntity.getParentCid() == 0)).map((menu) -> {//2.2找子菜单menu.setChildren(getChildrens(menu, entities));return menu;}).sorted((menu1, menu2) -> {//菜单的排序return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());}).collect(Collectors.toList());return level1Menus;}/*** 递归查找所有菜单的子菜单** @param root 父节点* @param all  所有数据* @return 子菜单(子菜单下的子菜单也能递归出来)*/private List getChildrens(CategoryEntity root, List all) {List children = all.stream().filter(categoryEntity -> {return root.getCatId().equals(categoryEntity.getParentCid());}).map(categoryEntity -> {//子菜单下看看是否还有子菜单categoryEntity.setChildren(getChildrens(categoryEntity, all));return categoryEntity;}).sorted((menu1, menu2) -> {//菜单的排序return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());}).collect(Collectors.toList());return children;}

最终结果:


标签:

上一篇: vue CLI 2.9.6卸载问题 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。