日期:2014-05-17  浏览次数:20898 次

求助:这个怎么实现,用到递归,树状列表
从数据库取到有94条记录的rs,94是不固定的

这个rs里,有部分记录是“组名”,是记录在一个字段里的,标记是“G”,比如记录“1号机组”是一个组名,id是2231。

有部分记录是组里的元素,这个有个标记字段“a”,比如a值是“2231”,代表它是“2231”组名的成员,如果是空,则代表它是普通记录,比如“功率”的

有个树状图,普通记录和组名都是排列在第一级,成员记录排列在组名下面作为子记录或是子菜单,子菜单有可能也是一个组名,它的下面也可能有成员,如果有成员,则要排在它的下面,作为子记录或是子菜单,这里就用到递归了,这个可能是无限的。




------解决方案--------------------
看不到
------解决方案--------------------
看不懂那个图跟问题有啥关系,不是混淆我们思路的吧
------解决方案--------------------
/**
* @param PostCode
* 根据父节点递归获取所有子节点岗位
* @return 树的子结点集合
*/
@SuppressWarnings("unchecked")
public List<JobType> getPostCodeChilds(String postCode) {
List<JobType> ret = new ArrayList<JobType>(); // 返回所有节点
List<JobType> retRecursive = null;
List<JobType> children = getChildrenNodes(postCode); // 每次递归出的临时节点列表,都要加到ret中。。

for(JobType job0 : children){
String displayOrder = job0.getDisplyOrder();
// 判断是否是最后一层节点(相当于LZ的普通记录),如果是则终止该节点下的递归
if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){
ret.add(job0);
}else{
// 不是最后一个节点(相当于LZ普通记录),则继续递归下面的节点
retRecursive = getPostCodeChilds(job0.getJobTypeCode());
// 判断ret是否为0
if(ret.size() == 0){
ret = retRecursive;
}else{
// 将每次递归的加入ret
ret.addAll(retRecursive);
}
}
}
return ret;
}

getChildrenNodes方法根据父节点查询下面子节点.