2024-01-24
今天開(kāi)發(fā)的時(shí)候,突然靈光一閃。想到一種快速生成菜單樹(shù)的方式。之前由于思路限制,大多是使用遞歸方式。有一定局限性,不僅需要另啟一個(gè)新方法,還得做遞歸層數(shù)的限制,防止無(wú)線遞歸。
Map<Long, List<MenuDetailVO>> rtnMapByPid = new HashMap<>();
for (MenuInfo accessMenu : menuList) {
List<MenuDetailVO> detailVOList = rtnMapByPid.computeIfAbsent(accessMenu.getParentId(), k -> new ArrayList<>());
MenuDetailVO menuInfoVO = new MenuDetailVO();
menuInfoVO.xxx();
menuInfoVO.xxx();
menuInfoVO.xxx();
List<MenuDetailVO> cdvList = rtnMapByPid.computeIfAbsent(accessMenu.getId(), k -> new ArrayList<>());
menuInfoVO.setChildren(cdvList);
detailVOList.add(menuInfoVO);
}
return rtnMapByPid.get(0L);
簡(jiǎn)單來(lái)說(shuō),先構(gòu)建一張hash表,再對(duì)所有菜單循環(huán)處理一遍。