@Override
public List<CategoryEntity> listWithTree() {
//1.查出所有分类
List<CategoryEntity> all = baseMapper.selectList(null);
//2.查出所有的一级分类,并将所有子分类保存到categoryEntitys属性
List<CategoryEntity> collects = all.stream().filter(c -> c.getParentCid().equals(0L))
.map(root->{
root.setChildren(getCategoryEntityS(root,all));
return root;
}).sorted((menu1,menu2)-> //一级分类菜单排序
(menu1.getSort()==null?0:menu1.getSort())-(menu2.getSort()==null?0:menu2.getSort())
).collect(Collectors.toList());
return collects;
}
/***
* 递归查出一级菜单下的所有子菜单以树状list返回
* @param root 当前菜单
* @param all 所有菜单
* @return 当前菜单的所有子菜单
*/
private List<CategoryEntity> getCategoryEntityS(CategoryEntity root,List<CategoryEntity> all) {
List<CategoryEntity> cList = all.stream().filter(c ->
c.getParentCid().equals(root.getCatId()) //将当前菜单所有子菜单查询出来
).map(c -> {
c.setChildren(getCategoryEntityS(c, all));//找子菜单
return c;
}).sorted((menu1,menu2)-> //子菜单排序(除一级菜单外的其他子菜单)
(menu1.getSort()==null?0:menu1.getSort())-(menu2.getSort()==null?0:menu2.getSort())
)
.collect(Collectors.toList());
return cList;
}
===========================实体类
package com.xiangshuai.gulimall.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.List;
import lombok.Data;
/**
* 商品三级分类
*
* @author lqx
* @email lqx@gmail.com
* @date 2021-08-29 22:27:42
*/
@Data
@TableName("pms_category")
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;
/**
* 子分类数据,数据库中无categoryEntitys字段
*/
@TableField(exist=false)
private List<CategoryEntity> children;
}