1:方法一:通过pid查询出全部pid下的菜单信息,包括父菜单
@GetMapping("/menu")
@ApiOperation(value = "树形查询", notes = "树形查询")
public Result<?> findMenu(@RequestParam String pid) {
List<DocCategoryManageVo> list = findMenu2(pid);
List<String> strings = new ArrayList<>();
List<String> menu2 = findMenu3(strings,list);
return Result.OK(list);
}
public List<String> findMenu3(List<String> strings,List<DocCategoryManageVo> list) {
for (DocCategoryManageVo docCategoryManageVo : list) {
strings.add(docCategoryManageVo.getId());
if (docCategoryManageVo.getChildMenu().size() > 0) {
findMenu3(strings,docCategoryManageVo.getChildMenu());
}
}
return strings;
}
public List<DocCategoryManageVo> findMenu2(String pid) {
List<DocCategoryManageVo> listVo = new ArrayList<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("pid", pid);
List<DocCategoryManage> list = docCategoryManageService.list(queryWrapper);
for (DocCategoryManage doc : list) {
DocCategoryManageVo docVo = new DocCategoryManageVo();
BeanUtils.copyProperties(doc, docVo);
docVo.setTitle(doc.getName());
docVo.setKey(doc.getId());
docVo.setValue(doc.getId());
docVo.setChildMenu(findMenu2(doc.getId()));
listVo.add(docVo);
}
return listVo;
}
2:方法二:通过pid查询出全部pid下的菜单信息,包括父菜单
void pidLoop(String pid, List<String> ids) {
ids.add(pid);
List<DocCategoryManage> listByPid = getListByPid(pid);
if(CollectionUtils.isEmpty(listByPid)) {
return;
} else {
for(DocCategoryManage doc : listByPid) {
pidLoop(doc.getId(), ids);
}
}
}
3:通过pid查询pid下的全部子菜单,不包括父菜单
@GetMapping("/menu")
@ApiOperation(value = "树形查询", notes = "树形查询")
public Result<?> findMenu(@RequestParam String pid) {
List<DocCategoryManageVo> list = findMenu2(pid);
List<String> flatten = flatten(list);
return Result.OK(list);
}
public List<String> flatten(List<DocCategoryManageVo> list) {
System.out.println("=======");
return list.stream()
.flatMap(d -> d.getChildMenu().size() > 0 ? flatten(d.getChildMenu()).stream() : Stream.of(d.getId()))
.collect(Collectors.toList());
}
public List<DocCategoryManageVo> findMenu2(String pid) {
List<DocCategoryManageVo> listVo = new ArrayList<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("pid", pid);
List<DocCategoryManage> list = docCategoryManageService.list(queryWrapper);
for (DocCategoryManage doc : list) {
DocCategoryManageVo docVo = new DocCategoryManageVo();
BeanUtils.copyProperties(doc, docVo);
docVo.setTitle(doc.getName());
docVo.setKey(doc.getId());
docVo.setValue(doc.getId());
docVo.setChildMenu(findMenu2(doc.getId()));
listVo.add(docVo);
}
return listVo;
}