在Java中将平面列表转换为嵌套树可以通过递归算法来实现。下面是一个示例代码:
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
,其中每个元素都有id
和parentId
属性,表示节点的唯一标识和父节点的标识。然后,我们调用convertToTree
方法将平面列表转换为嵌套树形结构。
在convertToTree
方法中,我们首先构建了一个节点映射表map
,用于快速查找每个节点的子节点。然后,我们遍历平面列表,将每个节点添加到对应父节点的子节点列表中。最后,我们递归地构建嵌套树,将子节点添加到父节点的children
属性中。
运行以上代码,将输出转换后的嵌套树形结构。你可以根据实际需求对节点的属性进行调整和扩展。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行。
领取专属 10元无门槛券
手把手带您无忧上云