1、普通写法【第一个参数是顶级的parentid,第二个参数是数据列表】
/**
* 递归获取子节点下的子节点
* @param integer 父节点的ID
* @param treesList 所有菜单树集合
* @return
*/
private List<DepartmentInfoVo> getChildrenNode(String integer, List<DepartmentInfoVo> treesList) {
List<DepartmentInfoVo> newTrees = new ArrayList<>();
for (DepartmentInfoVo department : treesList) {
if (StrUtil.isBlank(department.getDepartmentParentId())) {
continue;
}
if (integer.equals(department.getDepartmentParentId())) {
// 递归获取子节点下的子节点,即设置树控件中的children
department.setChildren(getChildrenNode(department.getDepartmentId(), treesList));
newTrees.add(department);
}
}
return newTrees;
}
2、hutool
<!-- hutool工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.2</version>
</dependency>
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
treeNodeConfig.setWeightKey("menuSort");
treeNodeConfig.setIdKey("menuId");
treeNodeConfig.setParentIdKey("menuParentid");
// 最大递归深度
treeNodeConfig.setDeep(Convert.toInt(appMenuSelectDto.getMenuDepth()));
//转换器
List<Tree<String>> treeNodes = TreeUtil.build(appMenuList, "0", treeNodeConfig,
(treeNode, tree) -> {
tree.setId(treeNode.getMenuId());
tree.setParentId(treeNode.getMenuParentid());
tree.setWeight(treeNode.getMenuSort());
tree.setName(treeNode.getMenuName());
// 扩展属性 ...
tree.putExtra("value", treeNode.getMenuName());
tree.putExtra("label", treeNode.getMenuId());
});
两种写法出来效果一样