常见标签树形结构(多级标签树)

961 阅读1分钟

数据表结构 image.png

@Data
public class CategoryEntity implements Serializable {
   private static final long serialVersionUID = 1L;

   /**
    * 分类id
    */
   @TableId
   private 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<CategoryEntity> children;

}

public List<CategoryEntity> listWishTree() {
    // 查询所有标签
    List<CategoryEntity> entities = baseMapper.selectList(null);
/*
*/
    
        List<CategoryEntity> level1Menu = entities.stream().filter(categoryEntity ->
                categoryEntity.getParentCid() == 0
        ).map((menu) -> {
         // 查询子标签
            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 level1Menu;
}

// 递归查找
private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) {
    List<CategoryEntity> children = all.stream().filter((entity) -> {
        return entity.getParentCid() == root.getCatId();
    }).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;
}