JavaSE-父子id集合构建为树tree结构-示例

public class Node {
private final Type type;
private final List<Node> children;
public Node(Type type) {
this.type = type;
this.children = new ArrayList<>();
}
public Type getType() {
return type;
}
public List<Node> getChildren() {
return children;
}
public static Collection<Node> createTree(List<Type> types) {
Map<Long, Node> nodes = new HashMap<>();
for (Type type : types) {
if (!nodes.containsKey(type.getId())) {
Node node = new Node(type);
nodes.put(type.getId(), node);
}
}
for (Type type : types) {
Node node = nodes.get(type.getId());
for (Type descendant : types) {
if (descendant.getParentId() != null && descendant.getParentId() == type.getId()) {
node.getChildren().add(nodes.get(descendant.getId()));
}
}
}
return nodes.values().stream()
.filter(node -> node.getType().getParentId() == 0)
.collect(Collectors.toList());
}
@Override
public String toString() {
return "Node{" +
"type=" + type +
", children=" + children +
'}';
}
public static void main(String[] args) {
List<Type> types = Arrays.asList(
new Type(1L, "a", "Parent A", 0L),
new Type(2L, "b", "Child B of A", 1L),
new Type(3L, "c", "Child C of A", 1L),
new Type(4L, "d", "Grandchild D of A", 2L),
new Type(5L, "e", "Grandchild E of A", 3L),
new Type(6L, "f", "Parent F", 0L),
new Type(7L, "g", "Child G of F", 6L)
);
System.out.println(createTree(types));
}
}
posted @   生生灯火半杯月  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示