菜單目錄樹結構查詢方法,樹形結構的關鍵點在于遞歸
public class Menu {
private String id;
private String parentId;
private String url;
private List<Menu> children;
/*省略get\set*/
}
public class MenuTree {
private List<Menu> menuList = new ArrayList<Menu>();
public MenuTree(List<Menu> menuList) {
this.menuList=menuList;
}
//建立樹形結構
public List<Menu> builTree(){
List<Menu> treeMenus =new ArrayList<Menu>();
for(Menu menuNode : getRootNode()) {
menuNode=buildChilTree(menuNode);
treeMenus.add(menuNode);
}
return treeMenus;
//遞歸,建立子樹形結構
private Menu buildChilTree(Menu pNode){
List<Menu> chilMenus =new ArrayList<Menu>();
for(Menu menuNode : menuList) {
if(menuNode.getParentId().equals(pNode.getId())) {
chilMenus.add(buildChilTree(menuNode));
}
pNode.setChildren(chilMenus);
return pNode;
//擷取根節點
private List<Menu> getRootNode() {
List<Menu> rootMenuLists =new ArrayList<Menu>();
// parentId為空就表示為第一級菜單
if(menuNode.getParentId() == null) {
rootMenuLists.add(menuNode);
return rootMenuLists;