![4651321-2f5eac27cb0f0107.png](https://i-blog.csdnimg.cn/blog_migrate/6039473df1abfa1b0e5837e54bcafd9a.webp?x-image-process=image/format,png)
tree
阅读原文请访问我的博客 BrightLoong's Blog
之前在项目需要实现一个功能——将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中;由于xml结构的数据是结构化的数据,所以需要保证保存的数据具有正确的主外键关联。如下所示,是一个需要保存到数据库的xml文件。当映射成对应的实体school和student的时候,我们需要知道“school-one”下面有哪些学生,“school-two”下面有哪些学生,这个时候想到了使用树形结构来保存实体,让实体之间依然存在关联关系。
<school-inf>
<msg>2017-10-1XX省学校信息总汇</msg>
<schools>
<school>
<name>school-one</name>
<students>
<student>Jack</student>
<student>Rose</student>
<student>Jon</student>
</students>
</school>
<school>
<name>school-two</name>
<students>
<student>Bob</student>
<student>Alisa</student>
</students>
</school>
</schools>
</school-inf>
树形工具
以下是树形工具类的实现,包含了树形节点类和树形结构类,由于代码中注释已经比较全面,所以不做过多的说明。
树形节点类BeanTreeNode.java
每一个节点对应一个实体,节点包含了实体信息,为了保证实体之间的关联关系,需要留有父节点信息,所有的子节点信息。由此推断出,节点的主要成员有
- 父节点信息
- 所有子节点信息
- 当前实体信息
为了方便操作,我还多增加了id和pid(parent id),以及节点类型(nodeType)。对id的相关操作我并没有添加,如果需要可以自行添加。
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* 实体树形结构点
* BeanTreeNode
* @author BrightLoong
* @version 1.0
*
*/
public class BeanTreeNode {
/**标识id*/
private String id;
/**父id标识,为了方便获取冗余出来*/
private String pid;
/**父节点*/
private BeanTreeNode parentNode;
/**节点类型*/
private String nodeType;
/**节点值*/
private Object bean;
/**子节点*/
private List<BeanTreeNode> childNodes;
/**
* @param parentNode
* @param nodeType
* @param bean
* @param childNodes
*/
public BeanTreeNode(BeanTreeNode parentNode, String nodeType, Object bean) {
this.parentNode = parentNode;
this.nodeType = nodeType;
this.bean = bean;
this.childNodes = new ArrayList<BeanTreeNode>();
this.id = UUID.randomUUID().toString().replaceAll("-", "");
if (parentNode != null) {
this.pid = parentNode.getId();
}
}
/**
* @return the nodeType
*/
public String getNo