首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在java中将平面列表转换为嵌套树?

在Java中将平面列表转换为嵌套树可以通过递归算法来实现。下面是一个示例代码:

代码语言:txt
复制
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TreeConverter {
    public static void main(String[] args) {
        List<Map<String, Object>> flatList = new ArrayList<>();
        // 假设平面列表中的每个元素都有id和parentId属性
        flatList.add(createNode(1, null, "Node 1"));
        flatList.add(createNode(2, 1, "Node 1.1"));
        flatList.add(createNode(3, 1, "Node 1.2"));
        flatList.add(createNode(4, 2, "Node 1.1.1"));
        flatList.add(createNode(5, 2, "Node 1.1.2"));
        flatList.add(createNode(6, null, "Node 2"));

        List<Map<String, Object>> nestedTree = convertToTree(flatList);
        System.out.println(nestedTree);
    }

    private static Map<String, Object> createNode(int id, Integer parentId, String name) {
        Map<String, Object> node = new HashMap<>();
        node.put("id", id);
        node.put("parentId", parentId);
        node.put("name", name);
        return node;
    }

    private static List<Map<String, Object>> convertToTree(List<Map<String, Object>> flatList) {
        Map<Integer, List<Map<String, Object>>> map = new HashMap<>();
        List<Map<String, Object>> rootNodes = new ArrayList<>();

        // 构建节点映射表
        for (Map<String, Object> node : flatList) {
            int parentId = (Integer) node.get("parentId");
            if (parentId == 0) {
                rootNodes.add(node);
            } else {
                if (!map.containsKey(parentId)) {
                    map.put(parentId, new ArrayList<>());
                }
                map.get(parentId).add(node);
            }
        }

        // 递归构建嵌套树
        for (Map<String, Object> rootNode : rootNodes) {
            buildTree(rootNode, map);
        }

        return rootNodes;
    }

    private static void buildTree(Map<String, Object> parentNode, Map<Integer, List<Map<String, Object>>> map) {
        int id = (Integer) parentNode.get("id");
        if (map.containsKey(id)) {
            parentNode.put("children", map.get(id));
            for (Map<String, Object> childNode : map.get(id)) {
                buildTree(childNode, map);
            }
        }
    }
}

上述代码中,我们首先创建了一个平面列表flatList,其中每个元素都有idparentId属性,表示节点的唯一标识和父节点的标识。然后,我们调用convertToTree方法将平面列表转换为嵌套树形结构。

convertToTree方法中,我们首先构建了一个节点映射表map,用于快速查找每个节点的子节点。然后,我们遍历平面列表,将每个节点添加到对应父节点的子节点列表中。最后,我们递归地构建嵌套树,将子节点添加到父节点的children属性中。

运行以上代码,将输出转换后的嵌套树形结构。你可以根据实际需求对节点的属性进行调整和扩展。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券