背后
在用户管理业务开发过程中,通常需要查询出用户管理的菜单数据和当前菜单的所有上级数据。为了方便后续的cv工作,我打算把这种方法记录下来,以备不时之需.
代码实现细节
@Data
public class MenuDTO {
@Schema(description = "菜单id")
private String id;
@Schema(description = "标签(菜单名或按钮名)")
private String label;
@Schema(description = "父级id")
private String parentId;
@Schema(description = "子菜单")
private List<MenuDTO> children;
public MenuDTO() {
}
public MenuDTO(String id) {
this.id = id;
}
public List<MenuDTO> seekMenu(String menuId) {
List<MenuDTO> menuDTOS = new ArrayList<>();
if (this.getId().equals(menuId)) {
menuDTOS.add(this);
return menuDTOS;
}
if (CollUtil.isNotEmpty(this.children)) {
for (MenuDTO child : this.children) {
List<MenuDTO> seekList = child.seekMenu(menuId);
if (!seekList.isEmpty()) {
menuDTOS.add(this);
menuDTOS.addAll(seekList);
return menuDTOS;
}
}
}
return menuDTOS;
}
}
说明
/*
通过 菜单id 查找到本级和上级所有的菜单
*/
public List<MenuDTO> seekMenu(String menuId) {
List<MenuDTO> menuDTOS = new ArrayList<>();
if (this.getId().equals(menuId)) {
menuDTOS.add(this);
return menuDTOS;
}
if (CollUtil.isNotEmpty(this.children)) {
for (MenuDTO child : this.children) {
List<MenuDTO> seekList = child.seekMenu(menuId);
if (!seekList.isEmpty()) {
menuDTOS.add(this);
menuDTOS.addAll(seekList);
return menuDTOS;
}
}
}
return menuDTOS;
}