java返回树菜单结构数据
时间: 2023-05-25 13:04:15 浏览: 184
以下是一个例子,展示如何返回一个树形菜单结构的数据:
1. 先定义一个树节点的类:
```java
public class TreeNode {
private String id;
private String name;
private List<TreeNode> children;
// 构造方法和getter/setter
}
```
2. 然后编写一个方法递归遍历树形结构,并返回根节点:
```java
public TreeNode buildTree(List<MenuItem> menuItems) {
// 先构建一个空的根节点
TreeNode root = new TreeNode();
root.setId("0");
root.setName("根节点");
root.setChildren(new ArrayList<TreeNode>());
// 把所有一级菜单节点找出来,加入到根节点下面
for (MenuItem menuItem : menuItems) {
if (menuItem.getParentId().equals("0")) {
TreeNode child = new TreeNode();
child.setId(menuItem.getId());
child.setName(menuItem.getName());
child.setChildren(new ArrayList<TreeNode>());
root.getChildren().add(child);
}
}
// 遍历每个子节点,递归构建树
for (TreeNode child : root.getChildren()) {
buildSubtree(child, menuItems);
}
return root;
}
private void buildSubtree(TreeNode parent, List<MenuItem> menuItems) {
for (MenuItem menuItem : menuItems) {
if (menuItem.getParentId().equals(parent.getId())) {
TreeNode child = new TreeNode();
child.setId(menuItem.getId());
child.setName(menuItem.getName());
child.setChildren(new ArrayList<TreeNode>());
parent.getChildren().add(child);
buildSubtree(child, menuItems);
}
}
}
```
3. 最后,需要一个表示菜单项的类:
```java
public class MenuItem {
private String id;
private String name;
private String parentId;
// 构造方法和getter/setter
}
```
使用示例:
```java
List<MenuItem> menuItems = new ArrayList<>();
menuItems.add(new MenuItem("1", "菜单1", "0"));
menuItems.add(new MenuItem("2", "菜单2", "0"));
menuItems.add(new MenuItem("3", "菜单3", "1"));
menuItems.add(new MenuItem("4", "菜单4", "1"));
menuItems.add(new MenuItem("5", "菜单5", "2"));
menuItems.add(new MenuItem("6", "菜单6", "3"));
menuItems.add(new MenuItem("7", "菜单7", "3"));
TreeNode root = buildTree(menuItems);
```
最终得到的树形结构:
```
根节点
├── 菜单1
│ ├── 菜单3
│ │ └── 菜单6
│ └── 菜单4
└── 菜单2
└── 菜单5
└── 菜单7
```
阅读全文