Java代码
@Override
public RespondBean findAllMenu(String userId) {
List<MenuNodeVO> allMenu = menupermMapper.findAllMenu(userId);
// 存储每个菜单节点
Map<String, MenuNodeVO> nodeMap = allMenu.stream()
.collect(Collectors.toMap(MenuNodeVO::getMenuId, node -> node));
// 构建树
List<MenuNodeVO> roots = new ArrayList<>();
for (MenuNodeVO node : allMenu) {
//如果没有父节点则加入根节点
if (node.getParentMenuId() == null || node.getParentMenuId().isEmpty()) {
roots.add(node);
} else {
//拿到父节点对象把该节点加到父节点的子节点列表对象
MenuNodeVO parentNode = nodeMap.get(node.getParentMenuId());
if (parentNode != null) {
parentNode.getChildren().add(node);
}
}
}
return RespondBean.success(roots);
}
实体类
@Data
public class MenuNodeVO {
/**
* 菜单权限配置
*/
private String menuPermId;
/**
*机构编码
*/
private String instCode;
/**
*用户id
*/
private String userId;
/**
*菜单id
*/
private String menuId;
/**
*菜单类型
*/
private String menuType;
/**
*目录编码
*/
private String menuCode;
/**
*目录名称
*/
private String menuName;
/**
*菜单url地址
*/
private String path;
/**
*上级目录ID
*/
private String parentMenuId;
/**
*上级目录名称
*/
private String parentMenuName;
/**
*菜单顺序
*/
private Integer menuOrder;
private List<MenuNodeVO> children = new ArrayList<>();
}