`
darkranger
  • 浏览: 24687 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
将集合递归获取树形结构:


/**
*
* 递归获取数据
* @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);
}


}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics