思想:
获取数据库List返回集,遍历集合将数据封装到map集合,然后调用工具MenuTreeUtil类的menuList方法实现树结构
工具MenuTreeUtil类:
获取父节点menuList方法:遍历数据库返回集,根据pid获取父节点数据,然后调用menuChild方法获取子节点,然后将map集合封装到list集合;
获取子节点menuChild方法:遍历数据库返回集,根据封装的实体类对象dept的属性did获取子节点,然后用递归获取子节点,并封装到map集合,然后将map集合封装到list集合;
步骤:
一.实体类
@SuppressWarnings("serial")
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class Dept implements Serializable {
private Integer dId;
private String dName;
private String db_source;
private Integer pid;
private List<Dept> chilren; //子节点
}
二.工具类
package com.zhengxh.microservice.util;
import com.zhengxh.microservice.entity.Dept;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MenuTreeUtil {
public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>();
public List<Dept> menuCommon;
public List<Object> menuList(List<Dept> menu){ //controller层调用的方法 ,并将数据以list的形式返回
this.menuCommon = menu;
List<Object> list = new ArrayList<Object>();
for (Dept x : menu) {
Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
if(x.getPid().equals(0)){
mapArr.put("id", x.getDId());
mapArr.put("tree_name", x.getDName());
mapArr.put("parent_source", x.getDb_source());
mapArr.put("Parent_id", x.getPid());
mapArr.put("child", menuChild(x.getDId()));
list.add(mapArr);
}
}
return list;
}
public List<Object> menuChild(Integer id){ //子集查找遍历
List<Object> lists = new ArrayList<Object>();
for(Dept a : menuCommon){
Map<String,Object> childArray = new LinkedHashMap<String, Object>();
if(a.getPid().equals(id)){
childArray.put("id", a.getDId());
childArray.put("tree_name", a.getDName());
childArray.put("parent_source", a.getDb_source());
childArray.put("Parent_id", a.getPid());
childArray.put("child", menuChild(a.getDId()));
lists.add(childArray);
}
}
return lists;
}
}
三.controller调用:
@PostMapping(value = "/findTree")
public Object findTree() {
Map<String, Object> returnMap = new HashMap();
List<Dept> lists = deptService.getList();
MenuTreeUtil menuTree = new MenuTreeUtil();
List<Dept> lt = new ArrayList<Dept>();
for (int i = 0; i < lists.size(); i++) {
Dept t = new Dept();
t.setDId((Integer) lists.get(i).getDId());
t.setDName((String) lists.get(i).getDName());
t.setDb_source((String) lists.get(i).getDb_source());
t.setPid((Integer) lists.get(i).getPid());
lt.add(t);
}
System.out.println(lt);
List<Object> menuList = menuTree.menuList(lt);
returnMap.put("list", menuList);
return returnMap;
}