JAVA递归生成树形菜单的实现方法是什么(java,开发技术)

时间:2024-05-10 11:27:58 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

  递归生成一个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。通过以下过程实现:

    1.首先从菜单数据中获取所有根节点。

    2.为根节点建立次级子树并拼接上。

    3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。

JAVA递归生成树形菜单的实现方法是什么

  首先,编写数据模型Menu。每条菜单有自己的id、父节点parentId、菜单名称text、菜单还拥有次级菜单children。

importjava.util.List;publicclassMenu{privateStringid;privateStringparentId;privateStringtext;privateStringurl;privateStringyxbz;privateList<Menu>children;publicMenu(Stringid,StringparentId,Stringtext,Stringurl,Stringyxbz){this.id=id;this.parentId=parentId;this.text=text;this.url=url;this.yxbz=yxbz;}/*省略get\set*/}

  创建树形结构的类MenuTree。方法getRootNode获取所有根节点,方法builTree将根节点汇总创建树形结构,buildChilTree为节点建立次级树并拼接上当前树,递归调用buildChilTree不断为当前树开枝散叶直至找不到新的子树。完成递归,获取树形结构。

importjava.util.ArrayList;importjava.util.List;publicclassMenuTree{privateList<Menu>menuList=newArrayList<Menu>();publicMenuTree(List<Menu>menuList){this.menuList=menuList;}//建立树形结构publicList<Menu>builTree(){List<Menu>treeMenus=newArrayList<Menu>();for(MenumenuNode:getRootNode()){menuNode=buildChilTree(menuNode);treeMenus.add(menuNode);}returntreeMenus;}//递归,建立子树形结构privateMenubuildChilTree(MenupNode){List<Menu>chilMenus=newArrayList<Menu>();for(MenumenuNode:menuList){if(menuNode.getParentId().equals(pNode.getId())){chilMenus.add(buildChilTree(menuNode));}}pNode.setChildren(chilMenus);returnpNode;}//获取根节点privateList<Menu>getRootNode(){List<Menu>rootMenuLists=newArrayList<Menu>();for(MenumenuNode:menuList){if(menuNode.getParentId().equals("0")){rootMenuLists.add(menuNode);}}returnrootMenuLists;}}

  最后,插入一些数据试试效果。得到的json就可以生成图一菜单了。

importjava.util.ArrayList;importjava.util.List;importcom.alibaba.fastjson.JSON;publicclassHello{publicstaticvoidmain(String[]args){List<Menu>menuList=newArrayList<Menu>();/*插入一些数据*/menuList.add(newMenu("GN001D000","0","系统管理","/admin","Y"));menuList.add(newMenu("GN001D100","GN001D000","权限管理","/admin","Y"));menuList.add(newMenu("GN001D110","GN001D100","密码修改","/admin","Y"));menuList.add(newMenu("GN001D120","GN001D100","新加用户","/admin","Y"));menuList.add(newMenu("GN001D200","GN001D000","系统监控","/admin","Y"));menuList.add(newMenu("GN001D210","GN001D200","在线用户","/admin","Y"));menuList.add(newMenu("GN002D000","0","订阅区","/admin","Y"));menuList.add(newMenu("GN003D000","0","未知领域","/admin","Y"));/*让我们创建树*/MenuTreemenuTree=newMenuTree(menuList);menuList=menuTree.builTree();/*转为json看看效果*/StringjsonOutput=JSON.toJSONString(menuList);System.out.println(jsonOutput);}}

补充:java递归生成树形结构菜单

一、mysql表,数据自行准备

CREATETABLE`sys_menu`(`id`int(11)NOTNULLAUTO_INCREMENT,`pid`bigint(20)DEFAULTNULL,`title`varchar(255)CHARACTERSETutf8DEFAULTNULL,`path`varchar(255)CHARACTERSETutf8DEFAULTNULL,`level`int(11)DEFAULTNULL,`create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`update_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'更新时间',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=200DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci

二、创建对应的实体类

publicclassMenuimplementsSerializable{ privatestaticfinallongserialVersionUID=-5990021029947688358L; privateIntegerid; privateStringtitle;//菜单标题 privateStringpath;//路径 privateIntegerpid;//父菜单ID一级菜单pid为null privateIntegerlevel;//级别,排序用 privateList<Menu>children=newArrayList<Menu>(); publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetTitle(){ returntitle; } publicvoidsetTitle(Stringtitle){ this.title=title; } publicStringgetPath(){ returnpath; } publicvoidsetPath(Stringpath){ this.path=path; } publicIntegergetPid(){ returnpid; } publicvoidsetPid(Integerpid){ this.pid=pid; } publicIntegergetLevel(){ returnlevel; } publicvoidsetLevel(Integerlevel){ this.level=level; } publicList<Menu>getChildren(){ returnchildren; } publicvoidsetChildren(List<Menu>children){ this.children=children; }}

三、递归组装树形结构函数实现

/***@方法名:parseMenuTree<br>*@描述:组装菜单<br>*@paramlist数据库里面获取到的全量菜单列表*@return*/publicstaticList<Menu>parseMenuTree(List<Menu>list){List<Menu>result=newArrayList<Menu>();//1、获取第一级节点for(Menumenu:list){if(null==menu.getPid()){result.add(menu);}}//2、递归获取子节点for(Menuparent:result){parent=recursiveTree(parent,list);}returnresult;}publicstaticMenurecursiveTree(Menuparent,List<Menu>list){for(Menumenu:list){if(Objects.equals(parent.getId(),menu.getPid())){menu=recursiveTree(menu,list);parent.getChildren().add(menu);}}returnparent;}

四、从数据库获取菜单数据,调用组装菜单函数生成树形结构的数据

publicstaticvoidmain(String[]args){List<Menu>list=newArrayList<Menu>();//TODO这里从数据库获取全量菜单后放到list中//树形结构数据生成List<Menu>result=parseMenuTree(list);System.out.println(JSONObject.toJSONString(result));}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:JAVA递归生成树形菜单的实现方法是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Vue如何实现淘宝购物车三级选中功能下一篇:

19 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18