简介
树结构是一种包含自己的类,通过将自己用children[]包裹起来,在数据库中一般通过id和pid联动,形成树结构。
步骤指导
- 完成类的搭建,即为树结构搭建
- 完成工具类的书写,利用HashMap而不使用递归
- 引用工具类,实现树结构的json发送
案例演示
树结构搭建
@Data
@JsonInclude(JsonInclude.Include.NON_NULL) //空值不传递
public class SysAppMenuTree {
private Integer id;
private Integer pid;
private Integer menuType;
private String name; // 新添加的 name 字段
private List<SysAppMenuTree> children;
public void addChild(SysAppMenuTree node) {
if (node != null) {
if (children == null) {
children = new ArrayList<>();
}
children.add(node);
}
}
}
工具类的书写
public List<SysAppMenuTree> buildTrees(List<SysAppMenuTree> nodes) {
Map<Integer, SysAppMenuTree> map = new HashMap<>();
// 将所有节点放入 map,key 是节点的 id
for (SysAppMenuTree node : nodes) {
map.put(node.getId(), node);
}
List<SysAppMenuTree> roots = new ArrayList<>();
// 构建树结构
for (SysAppMenuTree node : nodes) {
if (node.getPid() == 0) {
roots.add(node);
} else {
SysAppMenuTree parent = map.get(node.getPid());
if (parent != null) {
parent.addChild(node);
}
}
}
return roots;
}
实现树结构的json发送
@Override
public List<SysAppMenuTree> findAllPermissionTree() {
List<SysAppMenuTree> sysAppMenuTrees = appPermissionSettingsMapper.findAllPermissionTree();
return buildTrees(sysAppMenuTrees);
}
说明
通过mapper查询出指定的SysAppMenuTree列表,需要查出什么数据或是需要什么数据,就加什么属性,此案例多查出了name字段,并且menuType当条件。
发送json格式如下:
{
"id":"",
"name":"",
"pid":"",
"children":[
{
"id":"",
"name":"",
"pid":""
}
]
}