*java使用递归思想处理树形结构类型数据 *
数据表对应的实体类
public class Category {
private Long id;
private Long parentId;
private String name;
public Category(Long id, Long parentId, String name) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
public Category() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
树形结构类
import java.util.ArrayList;
import java.util.List;
public class TreeNode {
private Long id;
private String label;
private List<TreeNode> children = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
}
实际处理方法
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
Category ca = null;
List<Category> categoryList = new ArrayList<>();
ca = new Category(1L, 0L, "贵阳");
categoryList.add(ca);
ca = new Category(2L, 0L, "毕节");
categoryList.add(ca);
ca = new Category(3L, 0L, "遵义");
categoryList.add(ca);
ca = new Category(4L, 1L, "云岩区");
categoryList.add(ca);
ca = new Category(5L, 1L, "观山湖区");
categoryList.add(ca);
ca = new Category(6L, 2L, "七星关区");
categoryList.add(ca);
ca = new Category(7L, 3L, "红花岗区");
categoryList.add(ca);
treeNode(0L, categoryList);
}
private static List<TreeNode> treeNode(Long id, List<Category> categoryList){
List<Category> nodes = getTreeNodeById(id, categoryList);
TreeNode treeNode = null;
List<TreeNode> treeNodeList = new ArrayList<>();
for(Category category : nodes){
treeNode = new TreeNode();
treeNode.setLabel(category.getName());
treeNode.setId(category.getId());
List<TreeNode> child = treeNode(category.getId(), categoryList);
treeNode.setChildren(child);
treeNodeList.add(treeNode);
}
return treeNodeList;
}
private static List<Category> getTreeNodeById(Long id, List<Category> categoryList) {
return categoryList.stream()
.filter(t->t.getParentId().equals(id))
.collect(Collectors.toList());
}
}