树结构数据的创建
树结构是我们常用的数据结构,在这里记录一下构建异步树的方法;
注:
这里的T 你们要用的话请替换你要创建树的数据类型
t的属性即那个类的id属性
请从 [获取父节点,装载子节点] 开始看;
树结构类:
public class TreeNode extends T
{
/**
* id属性
*/
private Long _id;
/**
* 树节点显示内容
*/
private String _text;
/**
* 是否有节点标识
*/
private String state;
/**
* 其他属性...
*/
private String attributes;
/**
* 子节点列表
*/
private List <TreeNode> children;
//get,set方法省略
}
将查出的数据装载到节点类中
private static TreeNode setClassTree (T class)
{
TreeNode treeNode = new TreeNode ();
//省略其他属性的....
//这个表示该节点有子节点
treeNode .setState ("open");
return metaDataClassTree;
}
获取父节点,装载子节点
public final static List <TreeNode> getfatherTreeNode (List <T> treeList)
{
List <TreeNode> newTreeDataList = new ArrayList <TreeNode> ();
for (T t: treeList)
{
//父节点为空则为顶级节点
if (StringUtils.isEmpty (t.getParentClassCode ()))
{
TreeNode classTree = new TreeNode ();
classTree = setClassTree (t);
// 获取该节点下的子节点
classTree.setChildren (getChildrenTreeNodeForClass (t.getCode (), treeList));
newTreeDataList.add (classTree);
}
}
return newTreeDataList;
}
递归装载子节点
private final static List <TreeNode> getChildrenTreeNodeForClass (String pid, List <T> treeList)
{
List <TreeNode> newTreeDataList = new ArrayList <TreeNode> ();
for (T t : treeList)
{
TreeNode classTree = new TreeNode ();
//非空判断,如果有服节点编码则跳过
if (StringUtils.isEmpty (t.getParentClassCode ()))
continue;
// 这是一个子节点
if (t.getParentClassCode ().equals (pid))
{
// 递归获取子节点下的子节点
classTree = setClassTree (t);
classTree.setChildren(getChildrenTreeNodeForClass (t.getCode (),treeList));
newTreeDataList.add (classTree);
}
}
return newTreeDataList;
}