java 获得菜单树

/** 菜单 DO 类 */
@Setter
@Getter
@ToString
public static class MenuDO { 
 /** 菜单标识 */
 private Long id;
 /** 菜单父标识 */
 private Long parentId;
 /** 菜单名称 */
 private String name;
 /** 菜单链接 */
 private String url;
} 
/** 菜单 VO 类 */
@Setter
@Getter
@ToString
public static class MenuVO { 
 /** 菜单标识 */
 private Long id;
 /** 菜单名称 */
 private String name;
 Java 编程技巧之数据结构 120
 /** 菜单链接 */
 private String url;
 /** 子菜单列表 */
 private List<MenuVO> childList;
} 

/** 构建菜单树函数 */
public static List<MenuVO> buildMenuTree(List<MenuDO> menuList) {
 // 检查列表为空
 if (CollectionUtils.isEmpty(menuList)) {
 return Collections.emptyList();
 } 
 // 依次处理菜单
 int menuSize = menuList.size();
 List<MenuVO> rootList = new ArrayList<>(menuSize);
 Map<Long, MenuVO> menuMap = new HashMap<>(menuSize);
 for (MenuDO menuDO : menuList) {
 // 赋值菜单对象
 Long menuId = menuDO.getId();
 MenuVO menu = menuMap.get(menuId);
 if (Objects.isNull(menu)) {
 menu = new MenuVO();
 menu.setChildList(new ArrayList<>());
 menuMap.put(menuId, menu);
 } 
 menu.setId(menuDO.getId());
 menu.setName(menuDO.getName());
 menu.setUrl(menuDO.getUrl());
 // 根据父标识处理
 Long parentId = menuDO.getParentId();
 if (Objects.nonNull(parentId)) {
 // 构建父菜单对象
 MenuVO parentMenu = menuMap.get(parentId);
 if (Objects.isNull(parentMenu)) {
 parentMenu = new MenuVO();
 parentMenu.setId(parentId);
 parentMenu.setChildList(new ArrayList<>());
 menuMap.put(parentId, parentMenu);
 } 
 
 // 添加子菜单对象
 parentMenu.getChildList().add(menu);
 } else { 
 // 添加根菜单对象
 rootList.add(menu);
 } 
 } 
 // 返回根菜单列表
 return rootList;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值