Java递归查询菜单列表实现教程

介绍

在Java开发中,经常会遇到需要查询菜单列表的情况。递归是一种非常常用的技术,可以帮助我们解决这个问题。本文将介绍如何使用Java递归查询菜单列表。

整体流程

首先,我们来看一下整件事情的流程,可以使用表格展示步骤:

步骤 描述
1 定义菜单实体类
2 构建菜单数据
3 编写递归查询方法
4 调用递归查询方法

接下来,我将逐步解释每一步需要做什么,以及需要使用的代码。

步骤一:定义菜单实体类

首先,我们需要定义一个菜单实体类,用于表示菜单的结构。菜单实体类通常包含菜单的ID、名称、父级ID等属性。以下是一个简单的菜单实体类的示例代码:

public class Menu {
    private String id;
    private String name;
    private String parentId;
    
    // 省略getter和setter方法
}

步骤二:构建菜单数据

接下来,我们需要构建一些菜单数据,用于演示递归查询菜单列表的过程。我们可以使用以下代码来构建一个菜单列表:

List<Menu> menuList = new ArrayList<>();

Menu menu1 = new Menu();
menu1.setId("1");
menu1.setName("菜单1");
menu1.setParentId("0");

Menu menu2 = new Menu();
menu2.setId("2");
menu2.setName("菜单2");
menu2.setParentId("0");

Menu menu3 = new Menu();
menu3.setId("3");
menu3.setName("菜单3");
menu3.setParentId("1");

// 添加其他菜单...

menuList.add(menu1);
menuList.add(menu2);
menuList.add(menu3);

// 添加其他菜单...

在这个示例中,我们构建了三个菜单,其中菜单1是菜单3的父菜单,而菜单2是顶级菜单。

步骤三:编写递归查询方法

接下来,我们需要编写一个递归查询方法,用于查询菜单列表。以下是一个示例的递归查询方法的代码:

public List<Menu> getMenuList(List<Menu> menuList, String parentId) {
    List<Menu> result = new ArrayList<>();
    
    for (Menu menu : menuList) {
        if (menu.getParentId().equals(parentId)) {
            List<Menu> children = getMenuList(menuList, menu.getId());
            menu.setChildren(children);
            result.add(menu);
        }
    }
    
    return result;
}

在这个方法中,我们首先创建一个空的结果列表result。然后,我们遍历菜单列表,如果某个菜单的父级ID等于给定的parentId,我们将递归调用getMenuList方法,查询该菜单的子菜单,并将其设置为该菜单的children属性。最后,将该菜单添加到结果列表中。最后,返回结果列表。

步骤四:调用递归查询方法

最后一步,我们需要调用递归查询方法来获取菜单列表。以下是一个示例调用的代码:

List<Menu> menuList = getMenuList(menuList, "0");

在这个示例中,我们调用getMenuList方法,并传入菜单列表以及顶级菜单的父级ID "0"。该方法将返回一个包含整个菜单列表的List对象。

完整示例代码

下面是一个完整的示例代码,展示了如何使用递归查询菜单列表:

public class Main {
    public static void main(String[] args) {
        List<Menu> menuList = new ArrayList<>();

        Menu menu1 = new Menu();
        menu1.setId("1");
        menu1.setName("菜单1");
        menu1.setParentId("0");

        Menu menu2 = new Menu();
        menu2.setId("2");
        menu2.setName("菜单2");
        menu2.setParentId("0");

        Menu menu3 = new Menu();
        menu3