package com.zbkj.common.vo; import cn.hutool.core.collection.CollUtil; import com.zbkj.common.response.MenusResponse; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * 菜单树 * +---------------------------------------------------------------------- * | CRMEB [ CRMEB赋能开发者,助力企业发展 ] * +---------------------------------------------------------------------- * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. * +---------------------------------------------------------------------- * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 * +---------------------------------------------------------------------- * | Author: CRMEB Team * +---------------------------------------------------------------------- */ public class MenuTree { private List menuList = new ArrayList(); public MenuTree(List menuList) { this.menuList = menuList; } //建立树形结构 public List buildTree() { List treeMenus = new ArrayList(); for (MenusResponse menuNode : getRootNode()) { menuNode = buildChildTree(menuNode); treeMenus.add(menuNode); } return sortList(treeMenus); } // 排序 private List sortList(List treeMenus) { treeMenus = treeMenus.stream().sorted(Comparator.comparing(MenusResponse::getSort).reversed()).collect(Collectors.toList()); treeMenus.forEach(e -> { if (CollUtil.isNotEmpty(e.getChildList())) { e.setChildList(sortList(e.getChildList())); } }); return treeMenus; } //递归,建立子树形结构 private MenusResponse buildChildTree(MenusResponse pNode) { List childMenus = new ArrayList(); for (MenusResponse menuNode : menuList) { if (menuNode.getPid().equals(pNode.getId())) { childMenus.add(buildChildTree(menuNode)); } } pNode.setChildList(childMenus); return pNode; } //获取根节点 private List getRootNode() { List rootMenuLists = new ArrayList(); for (MenusResponse menuNode : menuList) { if (menuNode.getPid().equals(0)) { rootMenuLists.add(menuNode); } } return rootMenuLists; } }