递归,一般用于菜单,区域等,有时候需要递归为树形结构,有时候需要递归为列表
@Test
void tree() {
List<Tree> trees = initList();
Tree root = new Tree("0", "root");
List<Tree> tree = getTrees("0",trees);
root.setList(tree);
System.out.println(JSONUtil.toJsonStr(root));
}
@Test
void treelist() {
List<Tree> trees = initList();
Tree root = new Tree("0", "root");
List<Tree> list = getList("0",trees);
list.add(root);
System.out.println(JSONUtil.toJsonStr(list));
}
// 递归为树
private List<Tree> getTrees(String id, List<Tree> trees) {
List<Tree> list = new ArrayList<>();
for (Tree tree : trees) {
if (tree.getPid().equals(id)) {
list.add(tree);
tree.setList(getTrees(tree.getId(),trees));
}
}
return list;
}
// 递归为列表
private List<Tree> getList(String id, List<Tree> trees) {
List<Tree> list = new ArrayList<>();
for (Tree tree : trees) {
if (tree.getPid().equals(id)) {
list.add(tree);
list.addAll(getList(tree.getId(),trees));
}
}
return list;
}
private List<Tree> initList() {
List<Tree> trees = new ArrayList<>();
trees.add(new Tree("0", "root"));
trees.add(new Tree("1", "0"));
trees.add(new Tree("2", "0"));
trees.add(new Tree("6", "2"));
trees.add(new Tree("7", "6"));
trees.add(new Tree("3", "1"));
trees.add(new Tree("4", "1"));
trees.add(new Tree("5", "4"));
return trees;
}
以下为实体类代码
public class Tree {
String id;
String pid;
List<Tree> list;
public Tree(String id, String pid) {
this.id = id;
this.pid = pid;
}
public Tree() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<Tree> getList() {
return list;
}
public void setList(List<Tree> list) {
this.list = list;
}
}
本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。