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));
}
}
JavaSE-父子id集合构建为树tree结构-示例
发布时间 2023-11-22 16:05:13作者: 生生灯火半杯月