構造treelist的過程可使用遞歸查詢獲取,表結構以下java
create table TB_TREE
(
id NUMBER not null,
name VARCHAR2(50),
parentId NUMBER //父節點
)oracle
Postgre Sql:ide
select 語句以下,oracle能夠用 start with connect by prior實現相似功能this
WITH RECURSIVE r AS (
SELECT
a.id, a.parentid, a.name
FROM TB_TREE a WHERE id= 976
union ALL
SELECT
b.id, b.parentid, b.name
FROM TB_TREE b, r WHERE b.parentid = r.id
)
select
id, parentid, name
from r
.net
import java.util.ArrayList;
import java.util.List;
public class Tree {
private int id;
private String name;
private int parentId;
private List<Tree> childrens;
public Tree(int id,String name,int parentId){
this.id = id;
this.name = name;
this.parentId = parentId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public List<Tree> getChildrens() {
return childrens;
}
public void setChildrens(List<Tree> childrens) {
this.childrens = childrens;
}
@Override
public String toString() {
return "Tree [id=" + id + ", name=" + name + ", parentId=" + parentId
+ ", childrens=" + childrens + "]";
}
public static void main(String[] args) {
Tree tree1 = new Tree(1, "頂層節點1", 0);
Tree tree2 = new Tree(2, "頂層節點2", 0);
Tree tree3 = new Tree(3, "頂層節點3", 0);
Tree tree4 = new Tree(4, "二級節點4", 1);
Tree tree5 = new Tree(5, "二級節點5", 2);
Tree tree6 = new Tree(6, "二級節點6", 3);
Tree tree7 = new Tree(7, "三級節點7", 4);
Tree tree8 = new Tree(8, "三級節點8", 4);
Tree tree9 = new Tree(9, "三級節點9", 5);
List<Tree> trees = new ArrayList<Tree>();
trees.add(tree9);
trees.add(tree8);
trees.add(tree7);
trees.add(tree6);
trees.add(tree5);
trees.add(tree4);
trees.add(tree3);
trees.add(tree2);
trees.add(tree1);
List<Tree> rootTrees = new ArrayList<Tree>();
for (Tree tree : trees) {
if(tree.getParentId() == 0){
rootTrees.add(tree);
}
for (Tree t : trees) {
if(t.getParentId() == tree.getId()){
if(tree.getChildrens() == null){
List<Tree> myChildrens = new ArrayList<Tree>();
myChildrens.add(t);
tree.setChildrens(myChildrens);
}else{
tree.getChildrens().add(t);
}
}
}
}
for (Tree tree : rootTrees) {
System.out.println(tree.toString());
}
}
}遞歸