您的位置:首页 > 编程语言 > Java开发

Java解析目录树

2016-03-11 00:00 316 查看
前几天写了一个java解析tree,时间仓促,写了一个效率低下的方法(递归调用。每次调用时select一次数据表),这几天有空,重新整理了一下。把数据表一次全部查出放在List中,然后通过代码处理,废话不说,直接代码。

表结构:

CREATE TABLE TREE (
"ID" VARCHAR2(32 BYTE) NOT NULL , //ID
"NODE_NAME" VARCHAR2(64 BYTE) NULL ,//节点名称
"NODE_ID" VARCHAR2(32 BYTE) NULL ,//节点id
"PARENT_ID" VARCHAR2(32 BYTE) NULL ,//父id
"BZ" VARCHAR2(100 BYTE) NULL //备注
)


domain

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Tree implements Serializable {
/** 内码 */
private String ID;
/** 节点名称 */
private String node_name;
/** 节点ID */
private String node_id;
/** 父节点ID */
private String parent_id;
/** 备注 */
private String bz;

private List<Tree> nodes = new ArrayList<Tree>();
/* 省略get,set */
}


handler

List<Tree> list = //查出表中数据
// 存放根节点
List<Tree> root = new ArrayList<Tree>();
// map中介,在map中构造树
Map<String, Tree> tree = new HashMap();
//遍历所有数据,将数据放入(map key:node_id,value:Tree)
for (Tree item : list) {
// 如果为0,该节点为根节点
if ("0".equals(item.getParent_id())) {
tree.put(item.getnode_id(), item);
} else {// 如果不为0,先去map中取出该行的父节点,把该行添加进父节点的nodes集合,再把该行添加进map中(若该行也是父节点,则下次可以取出),
Tree it = tree.get(item.getParent_id());
if (it != null) {
it.getnodes().add(item);
tree.put(item.getnode_id(), item);
}
}
}
// 循环完成之后。map中的数据重复。
// 在上面else中添加的子节点都包含在了父节点的nodes集合中,所以将parent_id==0的根节点添加进root集合中即可
Iterator<Entry<String, Tree>> it = tree.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
PublicityTree node = (Tree) entry.getValue();
if ("0".equals(node.getParent_id())) {
root.add(node);
}
}


这样,root List中就的数据就是所有的parent_id=="0"的节点。

再用一个JsonUtil工具类,就能把root转换成JSON字符串了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: