List转树形结构
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class TreeNode {
private Long id;
private Long parentId;
private String name;
private List<TreeNode> children = new ArrayList<>();
public TreeNode(Long id, Long parentId, String name) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
}
package service.treenode;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ListToTreeConverter {
public static void main(String[] args) {
List<TreeNode> nodeList = new ArrayList<>();
// 添加一些节点示例
nodeList.add(new TreeNode(1L, null, "根节点1"));
nodeList.add(new TreeNode(2L, 1L, "子节点1"));
nodeList.add(new TreeNode(3L, 1L, "子节点2"));
nodeList.add(new TreeNode(4L, 2L, "孙节点1"));
nodeList.add(new TreeNode(5L, 2L, "孙节点2"));
nodeList.add(new TreeNode(6L, 5L, "曾孙节点1"));
List<TreeNode> treeNodes = ListToTreeConverter.convertListToTree2(nodeList);
System.out.println(JSON.toJSONString(treeNodes));
}
public static List<TreeNode> convertListToTree(List<TreeNode> nodeList) {
List<TreeNode> rootNodes = new ArrayList<>();
for (TreeNode node : nodeList) {
if (node.getParentId() == null) {
rootNodes.add(node);
} else {
for (TreeNode parentNode : nodeList) {
if (parentNode.getId().equals(node.getParentId())) {
parentNode.getChildren().add(node);
break;
}
}
}
}
return rootNodes;
}
public static List<TreeNode> convertListToTree2(List<TreeNode> nodeList) {
// 先找出所有根节点(parentId为null的节点)
List<TreeNode> rootNodes = nodeList.stream()
.filter(node -> node.getParentId() == null)
.collect(Collectors.toList());
// 对于每个非根节点,找到其对应的父节点并添加到父节点的children列表中
nodeList.stream()
.filter(node -> node.getParentId()!= null)
.forEach(node -> {
TreeNode parentNode = nodeList.stream()
.filter(parent -> parent.getId() == node.getParentId())
.findFirst()
.orElse(null);
if (parentNode!= null) {
parentNode.getChildren().add(node);
}
});
return rootNodes;
}
}
不积跬步,无以至千里;不积小流,无以成江海。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-12-03 node.js