13、一次性取出List,并组装成树

这段代码主要实现了从数据库获取监管组织的数据,并通过递归函数构造树状结构的功能。首先,通过查询条件获取所有子组织,然后将数据转换为DTO对象列表。接着,遍历列表,找出顶层节点并进行递归操作,为每个节点添加子节点,最终构建出完整的树形结构。
摘要由CSDN通过智能技术生成
/**
 * 获取监管组织树状结构
 */
@Override
public List<BasSupnOrgBDTO> getTree(){
  QueryWrapper<BasSupnOrgBDO> childWrapper = new QueryWrapper<>();
  childWrapper.eq("VALI_FLAG",1).orderByAsc("LV").orderByAsc("SEQ");
  List<BasSupnOrgBDO> childrenBdoList = basSupnOrgBDAO.selectList(childWrapper);
  List<BasSupnOrgBDTO> childrenDtoList = BasSupnOrgBDtoAssembler.toBasSupnOrgBDtoList(childrenBdoList);
  return BasSupnOrgBDtoAssembler.buildDeptTree(childrenDtoList);
}
/**
     * 转换成树状结构
     * @param childrenDtoList
     * @return
     */
public static List<BasSupnOrgBDTO> buildDeptTree(List<BasSupnOrgBDTO> childrenDtoList)
{
  List<BasSupnOrgBDTO> returnList = new ArrayList<BasSupnOrgBDTO>();
  List<String> tempList = new ArrayList<String>();
  for (BasSupnOrgBDTO dto : childrenDtoList)
  {
    tempList.add(dto.getOrguntId());
  }
  for (Iterator<BasSupnOrgBDTO> iterator = childrenDtoList.iterator(); iterator.hasNext();)
  {
    BasSupnOrgBDTO dto = (BasSupnOrgBDTO) iterator.next();
    // 如果是顶级节点, 遍历该父节点的所有子节点
    if (!tempList.contains(dto.getPrntOrgId()))
    {
      recursionFn(childrenDtoList, dto);
      returnList.add(dto);
    }
  }
  if (returnList.isEmpty())
  {
    returnList = childrenDtoList;
  }
  return returnList;
}

private static void recursionFn(List<BasSupnOrgBDTO> list, BasSupnOrgBDTO t)
{
  // 得到子节点列表
  List<BasSupnOrgBDTO> childList = getChildList(list, t);
  t.setChildren(childList);
  for (BasSupnOrgBDTO tChild : childList)
  {
    if (hasChild(list, tChild))
    {
      recursionFn(list, tChild);
    }
  }
}

private static List<BasSupnOrgBDTO> getChildList(List<BasSupnOrgBDTO> list, BasSupnOrgBDTO t)
{
  List<BasSupnOrgBDTO> tlist = new ArrayList<BasSupnOrgBDTO>();
  Iterator<BasSupnOrgBDTO> it = list.iterator();
  while (it.hasNext())
  {
    BasSupnOrgBDTO n = (BasSupnOrgBDTO) it.next();
    if (StringUtils.isNotBlank(n.getPrntOrgId()) && n.getPrntOrgId().equals(t.getOrguntId()))
    {
      tlist.add(n);
    }
  }
  return tlist;
}

private static boolean hasChild(List<BasSupnOrgBDTO> list, BasSupnOrgBDTO t)
{
  return getChildList(list, t).size() > 0 ? true : false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值