递归 逐层统计树形结构数据

将集合递归获取树形结构:


/**
*
* 递归获取数据
* @param alist:所有分类
* @param subjname:对应统计的项目名称
* @param pk:对应项目主键
* @param reportList: 最后统计的结果集
* @param count:项目级别
*/

public void getReportVO(ArrayList<ReportVO> alist,String subjname,String pk,ArrayList<ReportVO> reportList,int count) throws BusinessException {
ArrayList<String> str=new ArrayList<String>();
//不同级别用空格区分
for(int i=0;i<count;i++){
subjname=" "+subjname;

}

//根据pk获取末节点VO
getEndNodes( pk, alist, str);
//存在下级节点 则查询出所有数据
if(str!=null&&!str.equals("")){
String[][] data=new String[str.size()][1];
for(int i=0;i<str.size();i++){
data[i][0]=str.get(i);

}
//根据项目名和末级节点得到数据
ReportVO reportvo=getEndNodeData(subjname,data);
reportList.add(reportvo);

}else{
//不存在下级节点
String[][] data=new String[1][1];
data[0][0]=pk;
ReportVO reportvo=getEndNodeData(subjname,data);
reportList.add(reportvo);
}

//递归统计节点数据
for(int i=0;i<alist.size();i++){
if(alist.get(i).getParentpk()!=null&&pk.equals(alist.get(i).getParentpk())){
ReportVO reportvo=alist.get(i);
String pk_costsubj_type = alist.get(i).getPk();
getReportVO(alist,reportvo.getSubjname(),pk_costsubj_type,reportList,count+1);

}
}
}


/**
*
* 递归方法 查找末级节点
* @param pk 项目主键
* @param list 所有分类
* @param str 所有末级节点pk集合
*/

public void getEndNodes(String pk, ArrayList<ReportVO> list,ArrayList<String> str) throws BusinessException {


boolean flag = false;

for(int i=0;i<list.size();i++){
//查找该主键的子节点
if(list.get(i).getParentpk()!=null&&pk.equals(list.get(i).getParentpk())){
flag = true;
String pk_costsubj_type = list.get(i).getPk();
getEndNodes(pk_costsubj_type,list,str);
}
}
//如果是最末级
if(!flag){
str.add(pk);
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值