如何使用Java实现一个简易版的多级菜单功能
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下如何使用Java实现一个简易版的多级菜单功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文1,首先是
千家信息网最后更新 2025年01月18日如何使用Java实现一个简易版的多级菜单功能
小编给大家分享一下如何使用Java实现一个简易版的多级菜单功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
正文
1,首先是数据库的设计
DROP TABLE IF EXISTS `t_category`;CREATE TABLE `t_category` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识目录的唯一id', `parent_id` int(11) DEFAULT NULL COMMENT '存储父级目录的id,0代表一级目录', `name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '目录的名称', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2.java后端代码
① 对应数据库的实体类
public class Category { private int id; private int parentId; private String name;}
② 返回给前端的实体类 //注意写一个有参的构造方法,方便我们把Category的数据注入进来
public class CategoryTwo extends Category{ private ListcategorieTwos; public CategoryTwo(){} //这个有参构造方法方便我们为属性赋值即把categoy的成员变量的值赋值到自身中 public CategoryTwo(Category category){ super(category.getId(),category.getParentId(),category.getName()); }}
③ 具体实现
//多级目录 public void findCategoryAll(){ //查询出所有的目录数据 Listcategorys = categoryMapper.findCategoryAll(null);//这个大家自己完成 //存放所有一级目录 List categoryTows = new ArrayList(); //找出一级目录,即 parentId = 0 的目录 for(Category category :categorys){ if(category.getParentId() == 0){ CategoryTwo categoryTwo = new CategoryTwo(category); categoryTows.add(categoryTwo);//存入一级目录集合中 } } //利用递归,找出所有一级目录的List ,这里我把具体实现包装到 findSubCategory()方法中了 categoryTows = findSubCategory(categorys,categoryTows); //最后就完成了,把数据按需求返回给前端就可以了。 System.out.println(categoryTows); } //找出List 中所有目录的子级目录 public List findSubCategory(List categorys,List categoryTwos){ for (CategoryTwo categoryTwo:categoryTwos) { //找出自身的子级目录,存放到List 中去 List categoryTwos2 = new ArrayList (); for (Category category:categorys){ //如果自身的id = 与某个目录的parentId 相等,则这个目录是自身的子级目录 if(categoryTwo.getId() == category.getParentId()){ categoryTwos2.add(new CategoryTwo(category)); } } //所有子级目录找到后,再回调findSubCategory()方法 让子级目录找到自己的子级 List categoryTwos3 = findSubCategory(categorys,categoryTwos2); //categoryTwos3真正的List ,把他添加到自身 categoryTwo.setCategorieTwos(categoryTwos3); } return categoryTwos;//返回注入好的对象 }
核心就是那个回调的方法,只要把这个搞清楚了,那就很容易了
附另一个实现方法
import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map; public class MenuTest { /** * @param args */ public static void main(String[] args) { MenuTest menuTest = new MenuTest(); List menuList = initMenu();//初始化菜单 Map menuMap = menuTest.rebuildMenus(menuList);//重构菜单 menuTest.showMenu(menuMap);//打印菜单 } /** * 重构菜单,构造成需要的结构 * @param menuList * @return */ private Map rebuildMenus(List menuList) { List rootMenuList=new ArrayList();//这个List用来存放根菜单 for (int j = 0; j < menuList.size(); j++) { Map menu = (Map) menuList.get(j); String parentId = menu.get("parentId").toString(); if (null==parentId || "".equals(parentId)) { rootMenuList.add(menu); } } menuList.removeAll(rootMenuList);//将根菜单从menuList中除去 HashMap menuMap = new HashMap(); for (int j = 0; j < rootMenuList.size(); j++) {//遍历根菜单,每一个跟菜单都遍历到最后一个子菜单(叶子节点) Map menu = (Map) rootMenuList.get(j); menu = this.pase(menu, menuList); menuMap.put(menu.get("id"), menu); } return menuMap; } /** * 递归构造菜单Map * @param menu * @param menuList * @return */ private Map pase(Map menu, List menuList) { for (int j = 0; j < menuList.size(); j++) { Map menu2 = (Map) menuList.get(j); if (menu2.get("parentId").toString().equals(menu.get("id").toString())) { if(menu.get("children") == null){ menu.put("children", new ArrayList()); } ((List)menu.get("children")).add(menu2); pase(menu2, menuList); } } return menu; } /** * 打印菜单 * @param menuMap */ private void showMenu(Map menuMap){ Iterator it = menuMap.keySet().iterator(); while(it.hasNext()){ Map menu = (Map) menuMap.get(it.next()); System.out.println(menu.get("id")+"--"+menu.get("name")); this.buildChildMenu(menu); } } /** * 构造子菜单 * @param menu */ private void buildChildMenu(Map menu){ List childList = (List) menu.get("children"); if(null!=childList){ for(int i=0;i以上是"如何使用Java实现一个简易版的多级菜单功能"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
菜单
目录
数据
方法
数据库
篇文章
j++
功能
简易
内容
前端
实体
递归
重构
不怎么
个子
代码
代表
变量
叶子
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海晶樵网络技术有限公司
销售管理数据库软件有哪些
龙岩服务器租用诚信企业
服务器进去黑屏
安阳殷都区软件开发
安徽专业软件开发哪家实惠
数据库 豆瓣
互联网人类科技树
nacos不使用数据库
抢购软件开发破解
net软件开发的应用
软件开发室设计方案
学习现代网络技术的意义
第三届青海省网络安全技能竞赛
腾讯云服务器apache怎么用
王其翔-麦苗网络技术
山西大学网络安全工程研究生
新加坡网络安全事件
网络服务器的ip地址可以改吗
网络安全四年级350字作文
信息网络安全责任追究制度
国有企业网络安全培训讲稿
宝塔如何管理服务器
软件开发的项目怎么来的
如何为网络安全做出贡献
山东设备保养管理软件开发平台
dell670服务器电源改可调
网络安全的表达形式
同花顺代理服务器设置
软件开发工程师的工作职责