想要封装一个 private Integer id; private Integer pid; private String name; private String path; private String redirect; private String component; private String icon; private String key; private List<MoudleDto> children;这个类的集合根据查出的菜单对象,要是其中菜单有父菜单的id就要封装带该父菜单的children集合里面,直到获取的菜单集合循环完毕,这段代码怎么写
时间: 2024-04-15 22:31:42 浏览: 13
你可以使用递归的方式来封装这个菜单对象及其子菜单的集合。以下是一个示例代码:
```java
public class MoudleDto {
private Integer id;
private Integer pid;
private String name;
private String path;
private String redirect;
private String component;
private String icon;
private String key;
private List<MoudleDto> children;
// 省略构造方法和其他 getter/setter 方法
public static List<MoudleDto> buildMenuTree(List<MoudleDto> menuList) {
List<MoudleDto> rootMenu = new ArrayList<>();
// 找出根节点菜单(pid 为 null 或 0 的菜单)
for (MoudleDto menu : menuList) {
if (menu.getPid() == null || menu.getPid() == 0) {
rootMenu.add(menu);
}
}
// 递归构建菜单树
buildChildren(rootMenu, menuList);
return rootMenu;
}
private static void buildChildren(List<MoudleDto> parentMenuList, List<MoudleDto> menuList) {
for (MoudleDto parentMenu : parentMenuList) {
List<MoudleDto> children = new ArrayList<>();
// 遍历所有菜单,找出当前父菜单的子菜单
for (MoudleDto menu : menuList) {
if (menu.getPid() != null && menu.getPid().equals(parentMenu.getId())) {
children.add(menu);
}
}
// 递归构建子菜单的子菜单
buildChildren(children, menuList);
// 将子菜单设置到父菜单中
parentMenu.setChildren(children);
}
}
}
```
在上述示例中,我们首先找出根节点菜单(即 `pid` 为 null 或 0 的菜单),然后使用递归的方式构建菜单树。在构建子菜单时,我们遍历所有菜单,找出当前父菜单的子菜单,并递归构建子菜单的子菜单。
你可以通过调用 `buildMenuTree` 方法并传入菜单列表来获取封装好的带有子菜单的菜单树。请根据你的实际数据结构和属性名进行相应的调整。