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

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


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

public void getReportVO(ArrayList alist,String subjname,String pk,ArrayList reportList,int count) throws BusinessException {
ArrayList str=new ArrayList();
//不同级别用空格区分
for(int i=0;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 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 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 list,ArrayList str) throws BusinessException {


boolean flag = false;

for(int i=0;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);
}


}

你可能感兴趣的:(递归 逐层统计树形结构数据)