public class Node {
private Long id;
private String name;
private Long parentId;
private List<Node> childs;
public Node(Long id, String name, Long parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public List<Node> getChilds() {
return childs;
}
public void setChilds(List<Node> childs) {
this.childs = childs;
}
}
实体类用于获取树结构的数据
public class Application {
public static List<Node> nodes;
static {
nodes = new LinkedList();
nodes.add(new Node(1L, "l1", -1L));
nodes.add(new Node(2L, "l2-1", 1L));
nodes.add(new Node(3L, "l2-2", 1L));
nodes.add(new Node(4L, "l3-1", 2L));
}
public List<Node> getNodes() {
List<Node> nodes = getTopLevelNodes();
nodes.forEach(o -> o.setChilds(getChildren(o)));
return nodes;
}
public List<Node> getChildren(Node node) {
List<Node> child = nodes.stream().filter(o -> o.getParentId() == node.getId()).collect(Collectors.toList());
if (child==null) {
return null;
}
child.stream().forEach(o -> o.setChilds(getChildren(o)));
return child;
}
public List<Node> getTopLevelNodes() {
return nodes.stream().filter(o -> o.getParentId() == -1).collect(Collectors.toList());
}
public static void main(String[] args) {
Application application = new Application();
List<Node> nodes = application.getNodes();
System.out.println(JSON.toJSON(nodes));
}
通过java8 的特性用流和递归的方式来处理树结构