2:如上图的结构 查询如下:
public List<CategoryListVO> getCategoryListVO(){
List<MallCategory> mallCategories = mallCategoryMapper.selectList(new QueryWrapper<MallCategory>().lambda().eq(MallCategory::getInvalid,0));
Map<Long,List<MallCategory>> map = new HashMap<>();
if(mallCategories==null||mallCategories.size()<1){
return null;
}
for (MallCategory mallCategory:mallCategories) {
if(!map.containsKey(mallCategory.getParentId())){
List<MallCategory> list = new ArrayList<>();
list.add(mallCategory);
map.put(mallCategory.getParentId(),list);
}else{
map.get(mallCategory.getParentId()).add(mallCategory);
}
}
return createChildMenu(0l, map);
}
private List<CategoryListVO> createChildMenu(Long pid, Map<Long, List<MallCategory>> map) {
if(!map.containsKey(pid)){
return null;
}
List<MallCategory> list = map.get(pid);
Collections.sort(list,(a, b)->(a.getSort() - b.getSort()));
//输出
List<CategoryListVO> allCategory = new ArrayList<>();
for(MallCategory m : list){
CategoryListVO categoryListVO = new CategoryListVO();
categoryListVO.setId(m.getId());
categoryListVO.setName(m.getName());
categoryListVO.setParentId(m.getParentId());
allCategory .add(categoryListVO);
List<CategoryListVO> ll = createChildMenu(m.getId(),map);
if(!CollectionUtils.isEmpty(ll)) {
categoryListVO.setChildren(ll);
}
}
return allCategory;
}