1.首先先准备一个迭代类
import lombok.*;
import java.util.List;
@Builder
@ToString
@Data
public class Tree {
private int id;
private String name;
private int pId;
private List<Tree> level ;
}
2.初始化运行 共有三种方式
public static void main(String[] args) {
initDB();
/**
* 方法1
*/
// List<Tree> trees = listGetStree(treeContainer);
// System.out.println(trees);
/**
* 方法2
*/
// List<Tree> trees = listToTree(treeContainer);
// System.out.println(trees);
/**
* 方法2
*/
List<Tree> trees = toTree(treeContainer);
System.out.println(trees);
}
private static List<Tree> treeContainer = new <Tree>ArrayList();
/**
* 链式调用添加数据
*/
public static void initDB(){
Tree tree = Tree.builder()
.id(1)
.name("0")
.pId(0)
.build();
Tree tree1 = Tree.builder()
.id(2)
.name("0-1")
.pId(1)
.build();
Tree tree2 = Tree.builder()
.id(3)
.name("0-2")
.pId(1)
.build();
Tree tree3 = Tree.builder()
.id(4)
.name("0-1-1")
.pId(2)
.build();
treeContainer.add(tree);
treeContainer.add(tree1);
treeContainer.add(tree2);
treeContainer.add(tree3);
}
方法一
/**
* 方法一、
* @param list
* @return
*/
private static List<Tree> listGetStree(List<Tree> list) {
List<Tree> treeList = new ArrayList<Tree>();
for (Tree tree : list) {
//找到根
if (tree.getPId() == 0) {
treeList.add(tree);
}
//找到子
for (Tree treeNode : list) {
if (treeNode.getPId() == tree.getId()) {
if (tree.getLevel() == null) {
tree.setLevel(new ArrayList<Tree>());
}
tree.getLevel().add(treeNode);
}
}
}
return treeList;
}
方法二
/**
* 方法二、
* @param list
* @return
*/
public static List<Tree> listToTree(List<Tree> list) {
//用递归找子。
List<Tree> treeList = new ArrayList<Tree>();
for (Tree tree : list) {
if (tree.getPId() == 0) {
treeList.add(findChildren(tree, list));
}
}
return treeList;
}
private static Tree findChildren(Tree tree, List<Tree> list) {
for (Tree node : list) {
if (node.getPId() == tree.getId()) {
if (tree.getLevel() == null) {
tree.setLevel(new ArrayList<Tree>());
}
tree.getLevel().add(findChildren(node, list));
}
}
return tree;
}
方法三
/**
*方法三
* @param list
* @return
*/
private static List<Tree> toTree(List<Tree> list) {
List<Tree> treeList = new ArrayList<Tree>();
for (Tree tree : list) {
if(tree.getPId() == 0){
treeList.add(tree);
}
}
for (Tree tree : list) {
toTreeChildren(treeList,tree);
}
return treeList;
}
private static void toTreeChildren(List<Tree> treeList, Tree tree) {
for (Tree node : treeList) {
if(tree.getPId() == node.getId()){
if(node.getLevel() == null){
node.setLevel(new ArrayList<Tree>());
}
node.getLevel().add(tree);
}
if(node.getLevel() != null){
toTreeChildren(node.getLevel(),tree);
}
}
}
本文仅用于学习记录积累。