java递归三级菜单
时间: 2023-09-17 21:14:44 浏览: 100
三级菜单树
以下是一个用Java实现递归三级菜单的示例代码:
```java
// 获取树状的菜单结构
@Override
public List<Menu> findTreeMenu() {
List<Menu> menus = findAllMenu();
List<Menu> rootMenus = new ArrayList<>();
// 从最上级菜单开始展示
for (Menu menu : menus) {
if (menu.getPid().equals(0L)) {
rootMenus.add(menu);
}
}
for (Menu rootMenu : rootMenus) {
// 获取最上级菜单的子菜单,子菜单的子菜单也会获取到
List<Menu> child = getChild(rootMenu.getId(), menus);
rootMenu.setSubMenu(child);
}
return rootMenus;
}
// 获取子菜单方法
private List<Menu> getChild(Long id, List<Menu> menus) {
List<Menu> childList = new ArrayList<>();
for (Menu menu : menus) {
if (menu.getPid().equals(id)) {
childList.add(menu);
}
}
for (Menu menu : childList) {
List<Menu> child = getChild(menu.getId(), menus);
menu.setSubMenu(child);
}
if (childList.size() == 0) {
return null;
}
return childList;
}
// 实体类设计
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
@Data
@TableName("t_menu")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Menu {
private Long id;
private String menuname;
private Long pid;
private String url;
@TableField(exist = false)
private List<Menu> subMenu;
}
```
这段代码实现了一个递归的三级菜单结构。首先,通过`findTreeMenu()`方法获取根菜单列表。然后,通过`getChild()`方法递归获取每个菜单的子菜单,直到没有子菜单为止。最后,将子菜单列表赋值给每个菜单的`subMenu`属性。实体类`Menu`定义了菜单的属性,包括菜单ID、菜单名称、父菜单ID、URL和子菜单列表。
#### 引用[.reference_title]
- *1* *2* *3* [java实现三级菜单展示(递归)](https://blog.csdn.net/WoAiXiaoMingMing/article/details/121518156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文