TreeUtil是一个Java工具类,它提供了一些递归函数,用于将列表数据构建成树形结构。这个工具类的使用非常方便,特别是在前后端分离的Web应用程序中,前端通常需要树形结构的JSON数据表示,而该工具类正是为此而设计。
TreeUtil菜单递归工具类的主要功能是将一组菜单数据转换为树结构,并使用json返回给前端页面。
标题
引入
在使用该工具类之前,需要先引入以下依赖:
<!-- Lombok,可以省去get/set方法的编写 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- JSON序列化工具 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
核心代码
具体的核心代码如下:
public class TreeUtil {
/**
* 把列表转换成树形结构
* @param list
* @param parentId
* @param <T>
* @return
*/
public static <T extends TreeNode> List<T> build(List<T> list, Long parentId) {
List<T> result = new ArrayList<T>();
//遍历所有节点
for (T node : list) {
//找到父节点为parentId的节点
if (node.getParentId().equals(parentId)) {
result.add(node);
// 递归遍历子节点
node.setChildren(build(list, node.getId()));
}
}
return result;
}
/**
* 构建树形结构,并转成JSON字符串
* @param list 待转换的列表数据
* @param rootId 根节点ID
* @return
*/
public static String buildJson(List<? extends TreeNode> list, Long rootId) {
// 构建树形结构
List<? extends TreeNode> treeList = build(list, rootId);
// 将树形结构转成JSON字符串
return JSON.toJSONString(treeList);
}
}
示例说明
假设现在有一个菜单数据列表,我们想要将它转换为树形结构,并使用json返回给前端。具体的数据如下:
@Data
public class Menu implements TreeNode {
private Long id;
private Long parentId;
private String name;
private String url;
private List<TreeNode> children;
}
我们需要先将菜单数据列表转换为树形结构,然后将结果转成json格式,给前端页面渲染。
public class MenuController {
@RequestMapping("/menu")
public String menu(Model model) {
//构建模拟数据
List<Menu> menus = new ArrayList<>();
menus.add(new Menu(1L, 0L, "系统管理", ""));
menus.add(new Menu(2L, 1L, "用户管理", "/user/list"));
menus.add(new Menu(3L, 1L, "角色管理", "/role/list"));
menus.add(new Menu(4L, 1L, "菜单管理", "/menu/list"));
menus.add(new Menu(5L, 0L, "用户日志", ""));
// 构建树形结构
List<? extends TreeNode> treeList = TreeUtil.build(menus, 0L);
// 转换成json
String json = TreeUtil.buildJson(treeList, 0L);
model.addAttribute("menu", json);
return "admin/menu";
}
}
菜单的的组成关系是通过每个菜单项的parentId来表示的,一般来说根节点的parentId值为0。在上述代码中,我们以0为根节点,将菜单列表转换成了树形结构,并且转成了json格式返回给前端渲染。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java TreeUtil菜单递归工具类 - Python技术站