Java 通过递归实现菜单树形结构
// 最终结果集合
public List<RespMenu> selectMenu() {
List<RespMenu> finalList = new ArrayList<>();
// menuList 为数据库查询得到数据
if (CollectionUtils.isNotEmpty(menuList)){
//先找到所有的一级菜单
for (RespMenu menu : menuList) {
//一级菜单父级菜单Id为空 或者自己和父级菜单Id相同
if(StringUtils.isBlank(menu.getParentId()) || menu.getMenuId().equals(menu.getParentId())){
finalList.add(menu);
}
}
menuList.removeAll(finalList);
// 为一级菜单设置子菜单,getChild是递归调用的
for (RespMenu menu : finalList) {
// 调用私有方法获取子菜单
menu.setChildren(getChild(menu.getMenuId(),menuList));
}
}
return finalList;
}
/**
* 获取子菜单
*/
private List<RespMenu> getChild(String menuId,List<RespMenu> menuList){
//子菜单集合
List<RespMenu> childList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(menuList)) {
for (RespMenu menu : menuList) {
// 遍历所有节点,将父菜单id与传过来的id比较
if (StringUtils.isNotBlank(menu.getParentId())) {
if (menu.getParentId().equals(menuId)) {
childList.add(menu);
}
}
}
// 如果有子菜单还有子菜单,把子菜单的子菜单再循环一遍
for (RespMenu menu : childList) {
menu.setChildren(getChild(menu.getMenuId(), menuList));
}
}
return childList;
}
版权声明:本文为rq12345688原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。