代码
@Override public ListlistWithTree() { //1、查出所有分类 List entities = baseMapper.selectList(null); //2、组装成父子的树形结构 //2.1)、找到所有的一级分类 List level1Menus = 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 level1Menus; } //递归查找所有菜单的子菜单 private List getChildrens(CategoryEntity root, List all) { List children = all.stream().filter(categoryEntity -> { return categoryEntity.getParentCid() == root.getCatId(); }).map(categoryEntity -> { //1、找到子菜单 categoryEntity.setChildren(getChildrens(categoryEntity, all)); return categoryEntity; }).sorted((menu1, menu2) -> { //2、菜单的排序 return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort()); }).collect(Collectors.toList()); return children; } 实体类 @Data public class CategoryEntity implements Serializable { private static final long serialVersionUID = 1L; @TableId private Long catId; private String name; private Long parentCid; private Integer catLevel; @TableLogic(delval = "0",value = "1") private Integer showStatus; private Integer sort; private String icon; private String productUnit; private Integer productCount; @TableField(exist = false) @JsonInclude(JsonInclude.Include.NON_EMPTY) private List children; }



