我有这么个需求,是一张地区表,地区表中包含多层级的地区,如:中国,河北省,邢台市,桥东区。一共有4个层级。数据库字段设计为
id | parentId | name | level |
---|---|---|---|
编号 | 父id | 地区名 | 等级 |
我要讲这些数据转为 有层级关系的json数据:很显然数据的结构是个树,于是就要建立树的结构:
节点 node.class
public class Node{
public Map<Integer,Node> childs = new HashMap<>();
public String name;
public Integer id;
public Integer parentId;
}
有了节点开始构建树:
如下代码解释,我已经从数据库取到所有数据 attrAreas
进行一个树的构建
public void local(List<ModelAttrArea> attrAreas){
//建立根节点
Node root=new Node();
Map<Integer,Node> maps= new HashMap<>();
//遍历所有节点,将节点放入节点map中
for(ModelAttrArea temp:attrAreas) {
Node node = new Node();
node.name = temp.getName();
node.id = temp.getID();
node.parentId = temp.getParentId();
maps.put(temp.getID(),node);
}
//开始遍历已经放好的map,将没有父节点的节点放倒根目录下,把有父节点的节点,找到父节点,然后给父节点添加子节点。
for (Map.Entry<Integer, Node> entry : maps.entrySet()) {
Node e=entry.getValue();
Integer parentId = e.parentId;
if(parentId==null){
root.childs.put(e.id, e);
}else{
Node pnode = maps.get(parentId);
pnode.childs.put(e.id,e);
}
}
}
多叉树构建完毕~~