package com.farriver.bwf.common.utilities; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TreeBuilder { public static List buildTreeFromNodes(List nodes) { // 使用Map来帮助我们快速查找每个节点的父节点 Map nodeMap = new HashMap<>(); // 初始化map,将所有节点放入 for (TreeBuilderNode node : nodes) { var nodeKey = getNodeKey(node); if (nodeKey != null) { nodeMap.put(nodeKey, node); } } // 遍历列表,为每个节点找到其在map中的父节点,并添加自己到父节点的children列表中 for (TreeBuilderNode node : nodes) { TreeBuilderNode parent = nodeMap.get(getNodeParentKey(node)); // 实现此方法以获取父节点的名称 if (parent != null) { if (parent.getChildren() == null) { parent.setChildren(new ArrayList<>()); } parent.getChildren().add(node); } } // 返回根节点列表,根节点是没有父节点的节点 List roots = new ArrayList<>(); for (TreeBuilderNode node : nodes) { if (!nodeMap.containsKey(getNodeParentKey(node))) { roots.add(node); } } return roots; } // 这个方法需要你根据实际情况实现,来从Node中获取其父节点的名称 private static String getNodeParentKey(TreeBuilderNode node) { var pid = node.getParentid(); return pid; } private static String getNodeKey(TreeBuilderNode node) { var pid = node.getId(); return pid; } }