1不多说直接上代码
/**
* 查询多层数据,树形展示
* 2021年04月07日
*/
@RequestMapping("ceshi")
public Result ceshi(@RequestBody EquipmentParameter parameter) {
log.info(" ============正在查询 ");
//查询全部数据list
List<EquipmentParameter> equipmentParameterListStart =equipmentService.equipmentParameterList(parameter);
//创建一个一级list
List<EquipmentParameter> equipmentParameterList=new ArrayList<>();
// 先找到所有的一级分组
for (int i = 0; i < equipmentParameterListStart.size(); i++){
EquipmentParameter sysMenu=equipmentParameterListStart.get(i);
//parentLevelId=0时候意思为一级分组
int parentLevelId=sysMenu.getParentLevelId();
// 如果是顶级分组,没有父分组
if (parentLevelId==0){
equipmentParameterList.add(sysMenu);
}
}
// 为一级分组设置子分组,getChild是递归调用的
for (EquipmentParameter menu : equipmentParameterList) {
//获取子分组
menu.setChildren(getChild(menu.getId(), equipmentParameterListStart));
}
return Result.success(equipmentParameterList);
}
// 递归查找子分组
private List<EquipmentParameter> getChild(int id, List<EquipmentParameter> equipmentParameterListStart) {
//子分组
List<EquipmentParameter> childList = new ArrayList<EquipmentParameter>();
for (EquipmentParameter menu : equipmentParameterListStart) {
//遍历所有节点,将父分组id与传过来的id比较
if (menu.getParentLevelId()==id) {
childList.add(menu);
}
}
//递归(如果就两层递归下面这个for循环可以不用)
for (EquipmentParameter entity : childList) {
entity.setChildren(getChild(entity.getId(), equipmentParameterListStart));
}
// 递归退出条件
if (childList.size() == 0) {
return null;
}
return childList;
}
2展示结果
"code": "200",
"message": "成功",
"data": [
{
"id": 1,
"tabName": "江苏",
"tabId": "01",
"parentLevelId": 0,
"children": [
{
"id": 2,
"tabName": "宿迁",
"tabId": "1",
"parentLevelId": 1,
"children": [
{
"id": 4,
"tabName": "王集",
"tabId": "1",
"parentLevelId": 2,
"children": null
}
]
}
]
},
{
"id": 3,
"tabName": "南京",
"tabId": "19",
"parentLevelId": 0,
"children": null
}
],
"success": true
}