高效的将List转换成Tree


        // 将数据存储为 以 id 为 KEY 的 map 索引数据列
        Map<String, AntdTreeNode> map = new HashMap<>(16);
        mapList.forEach(m -> map.put(m.get(idField).toString(),
                convertToAntdTreeNodeFromMap(m, parentIdField, textField, keyField, valueField)));

        List<AntdTreeNode> treeList = new ArrayList<>();

        // 遍历, 组装返回结果
        for (Map mm : mapList) {
            // 获取当前资源的id和父id
            String curId = mm.get(idField).toString();
            String curPid = mm.get(parentIdField) == null ? null : mm.get(parentIdField).toString();

            // 如果父节点不存在或id 和 pid值一样,则当前节点是顶级节点
            AntdTreeNode parent = map.get(curPid);
            // if(parent == null || resource.getId().equals(curPid)) 这种会把所有pid识别不了的都作为顶级节点,某些
            // 情况下有问题,比如当某个角色没有勾选父菜单,只勾选了子菜单的时候,把子菜单当做了顶级节点(这种情况应该很少,
            // 因为勾选子节点一定要要求他勾选父节点)
            if (parent == null || curId.equals(curPid)) {
                // 是顶级节点
                treeList.add(map.get(curId));
            } else {
                // 子节点,需要把自己添加到他父节点的children中去
                if (parent.getChildren() == null) {
                    parent.setChildren(new ArrayList<>());
                }
                parent.getChildren().add(map.get(curId));
                parent.setIsLeaf(false);
                if (parentDiabled) {
                    parent.setDisableCheckbox(true);
                    parent.setDisabled(true);
                    parent.setSelectable(false);
                }
            }
        }

        return treeList;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值