Java解析目录树

前几天写了一个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字符串了。

 

转载于:https://my.oschina.net/OriginLeon/blog/635883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值