@Override public List<CategoryEntity> listWithTree() { // 1 查出所有分类 List<CategoryEntity> entities = baseMapper.selectList(null); // 2 组装成父子的树形结构 List<CategoryEntity> level1Menus = entities.stream().filter(categoryEntity -> categoryEntity.getParentCid().longValue() == 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<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) { List<CategoryEntity> children = all.stream().filter(categoryEntity -> { return categoryEntity.getParentCid().longValue() == root.getCatId().longValue(); // 注意此处应该用longValue()来比较,否则会出先bug,因为parentCid和catId是long类型 }).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; }