千家信息网

如何使用Java实现一个简易版的多级菜单功能

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,小编给大家分享一下如何使用Java实现一个简易版的多级菜单功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文1,首先是
千家信息网最后更新 2025年11月09日如何使用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 List categorieTwos;     public CategoryTwo(){}     //这个有参构造方法方便我们为属性赋值即把categoy的成员变量的值赋值到自身中    public CategoryTwo(Category category){        super(category.getId(),category.getParentId(),category.getName());    }}

③ 具体实现

//多级目录    public void findCategoryAll(){         //查询出所有的目录数据        List categorys = 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安全错误 数据库的锁怎样保障安全 移动开发和软件开发 公众号无法访问服务器 管理服务器 数据库服务器 mr11u打印机服务器 网络安全技能哪个最好 江西少儿编程软件开发 幼儿园网络安全管理检查表查 极光世界怎样查询角色服务器 宝安区网络技术转移包括什么 pdf卡片数据库是什么 腾讯云服务器续费会丢失 魅族游戏服务器如何转到其他频道 手机斗牛软件开发原理 数据库镜像的作用一般有哪些 安徽益美丽家网络技术有限公司 数据库简单使用 绍兴软件开发收费报价表 怎样查看代理服务器 2u服务器多重 哪里有电脑软件开发学 计算机信息网络安全措施 centos安装域控服务器 软件开发前后端哪个好 网络技术员报名 高中网络安全教育第4节 海康服务器自动执行任务 服务器没有网怎么上网 教育部办公厅官网网络安全宣传周 服务器内存条有必要换吗 我的世界斗罗大陆服务器怎么抽奖
0