public class DemoApplicationTests {
public static void main(String[] args) {
ArrayList<Node> nodes = new ArrayList<>();
nodes.add(new Node(1, 0, "1"));
nodes.add(new Node(2, 0, "2"));
nodes.add(new Node(3, 0, "3"));
nodes.add(new Node(4, 1, "1-1"));
nodes.add(new Node(5, 4, "1-1-1"));
nodes.add(new Node(6, 4, "1-1-2"));
nodes.add(new Node(7, 6, "1-1-2-1"));
nodes.add(new Node(8, 2, "2-1"));
nodes.add(new Node(9, 2, "2-2"));
nodes.add(new Node(10, 3, "3-1"));
ArrayList<Node> nodeTree = new ArrayList<>();
long start = System.currentTimeMillis();
for (Node node1 : nodes) {
if (node1.getPid() == 0) {
nodeTree.add(node1);
}
for (Node node2 : nodes) {
if (node1.getId().equals(node2.getPid())) {
node1.getChildren().add(node2);
}
}
}
System.out.println(JSON.toJSONString(nodeTree));
System.out.println(System.currentTimeMillis()-start);
}
@Test
public void testTree() {
ArrayList<Node> nodes = new ArrayList<>();
nodes.add(new Node(1, 0, "1"));
nodes.add(new Node(2, 0, "2"));
nodes.add(new Node(3, 0, "3"));
nodes.add(new Node(4, 1, "1-1"));
nodes.add(new Node(5, 4, "1-1-1"));
nodes.add(new Node(6, 4, "1-1-2"));
nodes.add(new Node(7, 6, "1-1-2-1"));
nodes.add(new Node(8, 2, "2-1"));
nodes.add(new Node(9, 2, "2-2"));
nodes.add(new Node(10, 3, "3-1"));
long start = System.currentTimeMillis();
Map<Integer,Node> map= new HashMap<>();
nodes.forEach(e->map.put(e.getId(),e));
for (Node node1 : nodes) {
Optional.ofNullable(map.get(node1.getPid())).ifPresent(p->{
p.children.add(node1);
});
}
List<Node> list = nodes.stream().filter(e -> Objects.equals(e.getPid(), 0)).collect(Collectors.toList());
System.out.println(JSON.toJSONString(list));
System.out.println(System.currentTimeMillis()-start);
}
}
class Node {
private Integer id;
private Integer pid;
private String name;
List<Node> children = new ArrayList<>();
}
transformTozTreeFormat: function (sNodes) {
var i, l;
var r = [];
var tmpMap = {
};
for (i = 0, l = sNodes.length; i < l; i++) {
tmpMap[sNodes[i].id] = sNodes[i];
}
for (i = 0, l = sNodes.length; i < l; i++) {
var p = tmpMap[sNodes[i].pid];
if (p && sNodes[i].id != sNodes[i].pid) {
var children = this.nodeChildren(p);
if (!children) {
children = this.nodeChildren(p, []);
}
children.push(sNodes[i]);
} else {
r.push(sNodes[i]);
}
}
return r;
}
nodeChildren: function (node, newChildren) {
if (typeof newChildren !== 'undefined') {
node.children = newChildren;
}
return node.children;
}