java 目录树_Java解析目录树 - OriginLeon的个人空间 - OSCHINA - 中文开源技术交流社区...

前几天写了一个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 nodes = new ArrayList();

/* 省略get,set */

}

handler

List list = //查出表中数据

// 存放根节点

List root = new ArrayList();

// map中介,在map中构造树

Map 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> 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字符串了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值