美文网首页
采用新的方式整理树形结构

采用新的方式整理树形结构

作者: bin_lifecycle | 来源:发表于2019-10-10 17:01 被阅读0次
    树形效果
    树形结构图
    代码片段:
        @Override
        public List<IpsegmentVo> findIpByGraphKindAndParentId(Map<String, Object> condition) {
            //创建IP段树集合
            List<IpsegmentVo> tree = new ArrayList<IpsegmentVo>();
            //查询所有IP段集合
            List<IpsegmentVo> list = ipsegmentMapper.findIpByGraphKindAndParentId(condition);
            //创建Map集合,建立节点和自身id的关系
            Map<String, IpsegmentVo> permissionMap = new HashMap<>();
            for (IpsegmentVo item : list) {
                //将每一个权限点和自己的id建立键值对的关系
                permissionMap.put(item.getId(), item);
            }
            for (IpsegmentVo item : list) {
                //把每一个节点看成是子节点
                IpsegmentVo child = item;
                if (StringUtils.isBlank(item.getParentSegmentId())) {
                    //顶级节点的父节点id是null,直接添加到权限集合返回
                    //此时的顶级节点通过下面的for循环已经有了自己的子节点集合
                    tree.add(item);
                } else {
                    //通过子节点的pid作为键(即作为父节点的id)来获取对应的父节点
                    IpsegmentVo parent = permissionMap.get(child.getParentSegmentId());
                    //整合父节点和子节点的关系
                    parent.getChildren().add(child);
                }
            }
            return tree;
        }
    

        采用这种方式,先一次性查询出所有的节点信息,然后采用双重for循环的方式,第一次for循环使用Map集合绑定了每个节点与id的关系,第二次循环通过条件判断将顶级节点找出来,先放入树形中作为顶级节点,然后再从map集合中找出每个子节点的父节点,用该父节点来拼装子节点,最后形成树形结构,这种方式把循环查询的工作都在代码中完成了,比采用递归方式组合树形结构效率要高,降低了查询数据库的频率,同时比采用常规的双重for循环要好,常规的双重for循环,查回来的结果放到List集合中,由于List集合没有使用索引,所以查询元素会比较慢,这里将List中的元素遍历一次放到Map集合中,从Map中获取元素就比较快,因为Map集合使用了索引,加快了查询速度

    相关文章

      网友评论

          本文标题:采用新的方式整理树形结构

          本文链接:https://www.haomeiwen.com/subject/tpeapctx.html