这里我是用的一个资源目录类对象SourceDir,它里面有nodeid,pnodeid(父节点),nodename等信息,具体代码如下,这是一个工具类,需要的话自己修改一下List对象即可
import catalog.sourcedir.models.SourceDir;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NodeUtil {
List<SourceDir> returnList = new ArrayList<SourceDir>();
/**
* 根据父节点的ID获取所有子节点
* @param list 分类
* @param typeId 传入的父节点ID
* @return List<Sourcedir>
*/
public List<SourceDir> getChildNodes(List<SourceDir> list, Long typeId) {
if(list == null && typeId == null) return null;
for (Iterator<SourceDir> iterator = list.iterator(); iterator.hasNext();) {
SourceDir node = (SourceDir) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (node.getPnodeid() != 0 && typeId.equals(node.getNodeid())) {
recursionFn(list, node);
}
// 二、遍历所有的父节点下的所有子节点
/*if (node.getParentId()==0) {
recursionFn(list, node);
}*/
}
return returnList;
}
/**
* 根据父节点的ID获取所有子节点
* @param list 分类
* @param typeId 传入的父节点ID
* @return String
*/
public String getChildNodesStr(List<SourceDir> list, Long typeId) {
if(list == null && typeId == null) return "";
for (Iterator<SourceDir> iterator = list.iterator(); iterator.hasNext();) {
SourceDir node = (SourceDir) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (node.getPnodeid() != 0 && typeId.equals(node.getNodeid())) {
recursionFn(list, node);
}
// 二、遍历所有的父节点下的所有子节点
/*if (node.getParentId()==0) {
recursionFn(list, node);
}*/
}
return returnList.toString();
}
private void recursionFn(List<SourceDir> list, SourceDir node) {
List<SourceDir> childList = getChildList(list, node);// 得到子节点列表
if (hasChild(list, node)) {// 判断是否有子节点
returnList.add(node);
Iterator<SourceDir> it = childList.iterator();
while (it.hasNext()) {
SourceDir n = (SourceDir) it.next();
recursionFn(list, n);
}
} else {
returnList.add(node);
}
}
/**
* 根据父节点获取他的下一级子节点(注意是只得到下一级的,不是全部的)
* @param list 分类表
* @return List<SourDir>
*/
public List<SourceDir> getChildList(List<SourceDir> list, SourceDir node) {
List<SourceDir> nodeList = new ArrayList<SourceDir>();
Iterator<SourceDir> it = list.iterator();
while (it.hasNext()) {
SourceDir n = (SourceDir) it.next();
if (n.getPnodeid().equals(node.getNodeid())) {
nodeList.add(n);
}
}
return nodeList;
}
/**
* 根据父节点判断是否有子节点
* @param list 分类表
* @return boolean
*/
public boolean hasChild(List<SourceDir> list, SourceDir node) {
return getChildList(list, node).size() > 0 ? true : false;
}
}
SourceDir实体类如下:
public class SourceDir extends Model implements java.io.Serializable {
// Fields
private Long nodeid;
private Long pnodeid;
private String nodename;
private Long treeid;
private String nodefcode;
private String nodenote;
private String arci;
private String oldnodeid;
private Long showorder;
private String nodepath;
// Constructors
// set get 方法
}
调用方法如下
NodeUtil nodeUtil = new NodeUtil();
List<SourceDir> listAll = nodeUtil.getChildNodes(list,nodeid);
//nodeid为截取子树的根节点id