概要
使用springboot生成排序的菜单树
数据图:
多说无益,直接上代码
步骤1:编写树生成的实例
public class 数据展示类{
private Integer id;
/**
* 文件/文件夹名称
*/
private String fileName;
/**
* 父节点名称
*/
private Integer pid;
/**
* 0 文件夹 1文件
*/
private Boolean fileType;
private Integer sortNum;
/**
* 子节点集合
*/
private List<BackgroundTreeDataVO> children;
}
步骤2.编写生成树的逻辑(只展示核心代码)
/**
* 所有的菜单数据
*/
private List<数据展示类> backgroundHelpList;
public BackgroundHelpTree(List<数据展示类> menuList) {
this.backgroundHelpList = menuList;
}
/**
* 建立树形结构
*
* @return
*/
public List<数据展示类> buildTree() {
List<数据展示类> treeMenus = new ArrayList<>();
for (数据展示类 menuNode : getRootNode()) {
menuNode = buildChildTree(menuNode);
treeMenus.add(menuNode);
}
Collections.sort(treeMenus,重写的排序类());
return treeMenus;
}
/**
* 递归,建立子树形结构
*
* @param pNode
* @return
*/
private 数据展示类 buildChildTree(数据展示类 pNode) {
List<数据展示类> childMenus = new ArrayList<>();
for (数据展示类 menuNode : backgroundHelpList) {
if (menuNode.getPid().equals(pNode.getId())) {
childMenus.add(buildChildTree(menuNode));
}
}
Collections.sort(childMenus,重写的排序类());
pNode.setChildren(childMenus);
return pNode;
}
/**
* 获取根节点
*
* @return
*/
private List<数据展示类> getRootNode() {
List<数据展示类> rootMenuLists = new ArrayList<>();
for (数据展示类 menuNode : backgroundHelpList) {
//等于0的默认为父节点
if (menuNode.getPid()==0) {
rootMenuLists.add(menuNode);
}
}
return rootMenuLists;
}
步骤3.查询数据字段
select id,file_name,pid,file_type,sort_num from 表名
步骤4.生成树,并且根据指定排序字段进行比较
实现类重写的方法
@Override
public int compare(T o1, T o2) {
if(o1.getSortNum()<o2.getSortNum()){
return -1;
}else{
return 1;
}
}
步骤5.构建结果展示
{
"id": 1,
"fileName": "产品简介",
"pid": 0,
"fileType": false,
"sortNum": 1,
"children": [{
"id": 2,
"fileName": "产品简介",
"pid": 1,
"fileType": false,
"sortNum": 1,
"children": [{
"id": 3,
"fileName": "产品简介",
"pid": 2,
"fileType": true,
"sortNum": 1,
"children": []
}]
}, {
"id": 8,
"fileName": "账号管理副本11",
"pid": 1,
"fileType": false,
"sortNum": 2,
"children": []
}, {
"id": 7,
"fileName": "测试用例",
"pid": 1,
"fileType": true,
"sortNum": 3,
"children": []
}]
}, {
"id": 4,
"fileName": "账号管理",
"pid": 0,
"fileType": false,
"sortNum": 3,
"children": [{
"id": 6,
"fileName": "活跃账号",
"pid": 4,
"fileType": true,
"sortNum": 1,
"children": []
}]
}, {
"id": 5,
"fileName": "活动分类",
"pid": 0,
"fileType": false,
"sortNum": 4,
"children": []
}
小结
欢迎一起总结学习,卷卷卷!!!