递归填充树结构
自己工作中总结的一个填充树形结构的方法,可以在多种场合下使用,比如部门 菜单等等的树形结构。
/*
递归填充树结构
Organize 单个成员实体类
memberList 最底层成员集合
AllOrgList 所有部门集合
rootId 根元素ID
*/
public static List<Organize> buildListMemberTree(List<Organize> memberList, List<Organize> allOrgList,String rootId) {
//是否是根节点
boolean isTop=false;
//memberList上一层部门集合,下次递归需要传入的新的memberList
Set<Organize> memberListUp=new HashSet<>();
//结果输出List
Set<Organize> resultList=new HashSet<>();
for(int i=0;i<copyOrgList.size();i++) {
Organize org = copyOrgList.get(i);
if(vo.getParentOrgId().equals(org.getOrgId())) {
if(org.getChildOrganize()==null) {
List<Organize> children=new ArrayList<>();
children.add(vo);
org.setChildOrganize(children);
}else {
org.getChildOrganize().add(vo);
//不去掉重复的,到时候前端收到的json数据会有问题,加上踢重速度会降低
/*List<Organize> children=org.getChildOrganize();
boolean bl=true;
for (Organize child : children) {
if(child!=null&&child.getOrgId().equals(vo.getOrgId())){
bl=false;
break;
}
}
if(bl){
children.add(vo);
}*/
}
voList.add(org);
break;
}
if(i==copyOrgList.size()-1){
System.out.println(vo.getOrgId()+"===="+vo.getParentOrgId());
break;
}
}
}
//所有成员都找到了子节点就返回
if(isTop) {
return new ArrayList<>(resultList);
}
return buildListMemberTree(new ArrayList<>(memberListUp),allOrgList,rootId);
}