JavaJava
2018-07-21 18:58阅读:19评论:0
java 非递归list转换为树tree型结构
需求 最近在做一个导出数据生成树节点的工作 ,从数据库中导出全国省市区街道数据,查询出来是 list集合需要转换成树 tree 表 大概有这几个字段 CREATE TABLE dic ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(63) NOT...
views-a5d25dd831.css">
md-250d69367f.min.css">
需求
- 最近在做一个导出数据生成树节点的工作 ,从数据库中导出全国省市区街道数据,查询出来是 list集合需要转换成树 tree
3">表
- 大概有这几个字段
CREATE TABLE dic (
id int(11) NOT NULL AUTOINCREMENT,
name varchar(63) NOT NULL,
parentid int(11) NOT NULL,
) ;
代码
15">DicTree类
import java.util.ArrayList;
import java.util.List;
/*PROTECTED1_ @author czw
PROTECTED2_/
public class DicTree {
/*PROTECTED3_ 节点id
PROTECTED4___PROTECTED5_ 城市名称
PROTECTED6___PROTECTED7_ 父级id
PROTECTED8___PROTECTED9_ 子节点
PROTECTED10___PROTECTED11_ 当前属于第几级节点
PROTECTED12___PROTECTED13_ 这里只要三级节点,如果不限制子节点个数,去掉 dicTree.getNode()判断
PROTECTED14___PROTECTED15_ 防止 fastjson把对象转化成json出现 $ref,加上 SerializerFeature.DisableCircularReferenceDetect
PROTECTED16___PROTECTED17__ 这里只要三级节点,如果不限制子节点个数,去掉 dicTree.getNode()判断
*/
if (dicTree.getId() == childrenDicTree.getParentId() && dicTree.getNode() < 2) {
if (dicTree.getChild() == null || dicTree.getChild().size() == 0) {
List<DicTree> myChildrens = new ArrayList<>();
removeList.add(childrenDicTree.getId());
myChildrens.add(childrenDicTree);
dicTree.setChild(myChildrens);
} else {
removeList.add(childrenDicTree.getId());
dicTree.getChild().add(childrenDicTree);
}
}
}
}
//如果是子节点,则已经移入到父级下面,因此需要从集合中移除
for (int i = 0; i < dicList.size(); i++) {
DicTree item = dicList.get(i);
if (removeList.contains(item.getId())) {
dicList.remove(item);
i--;
}
}
return dicList;
}
- 这种遍历就不需要考虑parentId是否为0