在ServiceImpl层利用Java进行递归操作
1、需要一个需要递归的实体,并且在数据库层面中,查询出带有多级结构的数据如下:
编号(id) | 父级编号(pid) | 名称(name) |
1 | 0 | 顶级分类 |
2 | 1 | 次级分类1 |
3 | 1 | 次级分类2 |
2、ServerImpl层
@Override
public List<Entity> dropDown() {
//查询出来的结果集
List<Entity> list = djPartyOrganizationMapper.dropDown();
List<Entity> topList = new ArrayList<>();//顶级分类
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getPid()==0){
topList.add(list.get(i));
}
}
//开始递归
for (Entity nav : topList) {
/* 获取根节点下的所有子节点 使用getChild方法*/
List<DjPartyOrganization> childList = getChild(list,nav.getId());
nav.setChildren(childList);//给根节点设置子节点
}
return topList;
}
3、递归核心方法
public List<Entity> getChild(List<Entity> list,Integer id){
List<Entity> childList = new ArrayList<>();
for (Entity e : list) {
// 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
//相等说明:为该根节点的子节点。
if(e.getPid().equals(id)){
childList.add(e);
}
}
//递归
for (Entity nav : childList) {
nav.setChildren(getChild(list,nav.getId()));
}
//如果节点下没有子节点,返回一个空List(递归退出)
if(childList.size() == 0){
return new ArrayList<>();
}
return childList;
}