求助:这个怎么实现,用到递归,树状列表
时间:2011-10-27
来源:互联网
从数据库取到有94条记录的rs,94是不固定的
这个rs里,有部分记录是“组名”,是记录在一个字段里的,标记是“G”,比如记录“1号机组”是一个组名,id是2231。
有部分记录是组里的元素,这个有个标记字段“a”,比如a值是“2231”,代表它是“2231”组名的成员,如果是空,则代表它是普通记录,比如“功率”的
有个树状图,普通记录和组名都是排列在第一级,成员记录排列在组名下面作为子记录或是子菜单,子菜单有可能也是一个组名,它的下面也可能有成员,如果有成员,则要排在它的下面,作为子记录或是子菜单,这里就用到递归了,这个可能是无限的。
这个rs里,有部分记录是“组名”,是记录在一个字段里的,标记是“G”,比如记录“1号机组”是一个组名,id是2231。
有部分记录是组里的元素,这个有个标记字段“a”,比如a值是“2231”,代表它是“2231”组名的成员,如果是空,则代表它是普通记录,比如“功率”的
有个树状图,普通记录和组名都是排列在第一级,成员记录排列在组名下面作为子记录或是子菜单,子菜单有可能也是一个组名,它的下面也可能有成员,如果有成员,则要排在它的下面,作为子记录或是子菜单,这里就用到递归了,这个可能是无限的。

作者: mmnan 发布时间: 2011-10-27
看不到
作者: hetengfei_ 发布时间: 2011-10-27
看不懂那个图跟问题有啥关系,不是混淆我们思路的吧
作者: Jack90210 发布时间: 2011-10-27
/**
* @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方法根据父节点查询下面子节点.
* @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方法根据父节点查询下面子节点.
作者: kouyiSC 发布时间: 2011-10-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28