树形表查询(不用递归)

 以下是service层的实现代码

@Override
public List<TreeVO> treeList() {
    //先将数据库的数据全部查出来
    List<AreaEntity> list = this.list();
    //定义集合接收所有查出来的数据
    List<TreeVO> allTreeVOs = new ArrayList<>();
    //定义集合接收所有顶级的数据(也就是upId==0的数据)
    List<TreeVO> rootNodeList = new ArrayList<>();
    Map<String, Integer> idMaps = new HashMap<>();
    Iterator<AreaEntity> recordIterable = list.iterator();
    int i = 0;
    while(recordIterable.hasNext()){
        AreaEntity record = recordIterable.next();
        TreeVO treeVO = new TreeVO();
        String key = record.getId().toString();
        Long upId = record.getUpId();
        treeVO.setUpId(upId.toString());
        treeVO.setValue(key);
        treeVO.setTitle(record.getMergeName());
        Map<String, Object> props = BeanUtil.beanToMap(record);
        treeVO.setProps(props);
        //把每一条TreeVO数据放到allTreeVOs集合中
        allTreeVOs.add(treeVO);
        if(upId == 0L){
            //把顶层数据放到rootNodeList集合中
            rootNodeList.add(treeVO);
        }
        //将每一条TreeVO数据的主键id和在allTreeVOs集合中的下标存入map集合中
        idMaps.put(key, i);
        i++;
    }
    for (TreeVO treeVO : allTreeVOs) {
        //遍历集合,看每一条treeVo是否存在上级
        String upIdStr = treeVO.getProps().get(TREE_PARENT_ID_FIELD_NAME).toString();
        if (!idMaps.containsKey(upIdStr)) {
            continue;
        }
        //根据上面获取的上级id拿到父节点
        TreeVO parentNode = allTreeVOs.get(idMaps.get(upIdStr));
        if (parentNode != null) {
            //父节点和子节点链接
            parentNode.getChildren().add(treeVO);
            parentNode.setIsLeaf(false);
        }
    }
    return rootNodeList;
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值