使用stream流式处理拼装三级分类
public List<CategoryEntity> listWithTree() {
//1. 查出所有分类
List<CategoryEntity> entities = baseMapper.selectList(null);
//2. 组装成父子的树形结构
//2.1 找到所有一级分类
List<CategoryEntity> level1Menus = entities.stream().filter(categoryEntity -> {
//查出一级分类后返回
return categoryEntity.getParentCid() == 0;
}).map((menu)->{
//查出当前分类 的所有下级分类,set进去后返回
menu.setChildren(getChildren(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;
}
递归查询子分类
private List<CategoryEntity> getChildren(CategoryEntity categoryEntity,List<CategoryEntity> all){
List<CategoryEntity> entityList = all.stream().filter(category -> {
return category.getParentCid().equals(categoryEntity.getCatId());
}).map(menu -> {
menu.setChildren(getChildren(menu, all));
return menu;
}).sorted((menu1, menu2) -> {
return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort() == null?0:menu2.getSort());
}).collect(Collectors.toList());
return entityList;
}
分类bean
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;
}