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; /** * 菜单树 */ 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); // return 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; } }