java list转树形结构工具类
时间: 2023-10-11 11:04:29 浏览: 146
以下是一个简单的 Java 工具类,可以将 List 转换为树形结构:
```java
import java.util.*;
public class TreeUtil {
public static <T extends TreeNode> List<T> buildTree(List<T> nodes) {
if (nodes == null || nodes.size() == 0) {
return Collections.emptyList();
}
Map<Long, T> nodeMap = new HashMap<>();
for (T node : nodes) {
nodeMap.put(node.getId(), node);
}
List<T> rootNodes = new ArrayList<>();
for (T node : nodes) {
T parent = nodeMap.get(node.getParentId());
if (parent != null) {
parent.addChild(node);
} else {
rootNodes.add(node);
}
}
return rootNodes;
}
public interface TreeNode {
Long getId();
Long getParentId();
void addChild(TreeNode child);
List<? extends TreeNode> getChildren();
}
}
```
这个工具类包含了一个通用的接口 `TreeNode`,通过实现这个接口,可以将任意类型的 List 转换为树形结构。 `TreeNode` 接口包含了三个方法:
- `getId()`:获取节点的唯一标识符。
- `getParentId()`:获取节点的父节点标识符。
- `addChild(TreeNode child)`:将一个子节点添加到当前节点。
- `getChildren()`:获取当前节点的所有子节点。
使用这个工具类非常简单,只需要将需要转换的 List 传入 `buildTree()` 方法中即可:
```java
List<MyNode> nodes = ...; // 获取需要转换的 List
List<MyNode> rootNodes = TreeUtil.buildTree(nodes);
```
其中 `MyNode` 是一个实现了 `TreeNode` 接口的自定义类。注意,为了能够正确地构建树形结构,每个节点的 `getParentId()` 方法必须返回其父节点的 `getId()` 值。否则,节点将无法正确地添加到树中。
阅读全文