java 把list数据转换成树行结构
时间: 2023-08-11 18:04:04 浏览: 129
将List数据转换成树形结构的基本思路是首先遍历List,将其中每个节点的父子关系建立起来,然后从根节点开始递归构建整个树形结构。
具体实现步骤如下:
1. 定义节点类,包含节点id、节点名称和子节点列表等属性。
```
public class TreeNode {
private String id;
private String name;
private List<TreeNode> children;
// getter和setter方法
// ...
}
```
2. 遍历List,将每个节点的父子关系建立起来,可以使用Map来存储节点id和对应的节点对象,便于查找父节点。
```
Map<String, TreeNode> map = new HashMap<>();
for (TreeNode node : list) {
map.put(node.getId(), node);
String parentId = node.getParentId();
if (parentId != null) {
TreeNode parent = map.get(parentId);
if (parent != null) {
parent.getChildren().add(node);
}
}
}
```
3. 找到根节点,开始递归构建整个树形结构。
```
public static TreeNode buildTree(List<TreeNode> list) {
// 构建Map,方便查找节点
Map<String, TreeNode> map = new HashMap<>();
for (TreeNode node : list) {
map.put(node.getId(), node);
}
// 找到根节点
TreeNode root = null;
for (TreeNode node : list) {
if (node.getParentId() == null) {
root = node;
break;
}
}
// 从根节点开始递归构建整个树形结构
buildSubTree(root, map);
return root;
}
private static void buildSubTree(TreeNode node, Map<String, TreeNode> map) {
List<TreeNode> children = node.getChildren();
if (children == null) {
return;
}
// 遍历子节点,递归构建子树
for (TreeNode child : children) {
buildSubTree(child, map);
}
// 根据子节点的顺序重新排序
children.sort(Comparator.comparing(TreeNode::getName));
}
```
以上就是将List数据转换成树行结构的基本实现方法。需要注意的是,这里的代码只是一个简单的示例,实际情况下可能需要根据具体的业务需求进行修改和优化。
阅读全文