@Override public ListlistWithTree() { // 1 查出所有分类 List entities = baseMapper.selectList(null); // 2 组装成父子的树形结构 List 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 ListgetChildrens(CategoryEntity root, List all) { List 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; }



