java 根据id和pid把List[]中的数组转换为树结构
时间: 2024-09-25 12:18:02 浏览: 48
在Java中,将一个二维列表(List[])转换成树形结构,通常需要遍历并使用递归或栈来构建层次结构。假设每个元素包含一个id、pid(表示父ID),可以按照以下步骤操作:
1. 定义一个`TreeNode`类,它包含id、pid以及子节点列表。
```java
public class TreeNode {
int id;
int pid;
List<TreeNode> children;
// 构造函数、 getters 和 setters...
}
```
2. 遍历二维列表,对于每个元素创建一个新的`TreeNode`实例,并将其添加到相应的父节点的孩子列表中。
```java
public TreeNode listToTree(List<List<Integer>> data) {
Map<Integer, TreeNode> map = new HashMap<>();
for (List<Integer> row : data) {
int id = row.get(0);
int pid = row.get(1);
if (!map.containsKey(pid)) {
map.put(pid, new TreeNode(pid));
}
TreeNode node = map.get(id);
node.setChildren(map.computeIfAbsent(id, k -> new TreeNode(k)));
}
return map.values().stream().findFirst().orElse(null); // 返回根节点
}
```
这个方法假设列表的第一列是ID,第二列是PID,且数据已经按正确的父子顺序排列。如果列表未排序或有错误的数据结构,你可能需要在转换之前先对数据进行预处理。
阅读全文