–实体类
public class Area {
private String id;
/**
* 地区名
*/
private String name;
/**
* 地区缩写
*/
private String code;
/**
* 父级的id
*/
private String parentId;
/**
* 地区等级 省-市-县
*/
private String levels;
}
–生成树的工具类
public class TreeUtil {
//所有的待用菜单
public static List<Area> all=null;
public static List<Map<String,Object>> toTree(List<Area> list){
all=new ArrayList<>(list);
//存放根节点
ArrayList<Map<String,Object>> roots = new ArrayList<>();
//添加顶级菜单
for (Area area : list) {
if("0".equals(area.getLevels())){
HashMap<String, Object> map = new HashMap<>();
map.put("id", area.getId());
map.put("title", area.getName());
map.put("pid", area.getId());
roots.add(map);
}
}
//删除全局变量中已经被添加节点的数据
all.removeAll(roots);
//添加子级菜单
for (Map<String, Object> root : roots) {
//一个一个的去找
root.put("children", getCurrentNodeChildren(root));
}
return roots;
}
/**
* 使用递归去查找子项
* @param root 传入的一个节点
* @return
*/
public static List<Map<String,Object>> getCurrentNodeChildren(Map<String,Object> root){
// ArrayList<Map<String, Object>> children = new ArrayList<>();
//判断是否有子节点,有的话就用当前的没有就新建一个空的
ArrayList<Map<String, Object>> children = root.get("children") == null ? new ArrayList<>() : (ArrayList<Map<String,Object>>)root.get("children");
for (Area area : all) {
if(root.get("id").equals(area.getParentId())){
HashMap<String, Object> map = new HashMap<>();
map.put("id", area.getId());
map.put("pid", area.getParentId());
map.put("title", area.getName());
children.add(map);
}
}
//添加完之后删除全局待使用菜单中的数据
all.removeAll(children);
//使用递归再次去查询
//遍历子节点 再去添加孙节点 如果为空的情况就不会去遍历,从而跳出递归
for (Map<String, Object> child : children) {
child.put("children", getCurrentNodeChildren(child));
}
return children;
}
}