将无序的List数据转成树形结构数据
在平常的项目中,经常会用到树形结构数据,看了一些网友写的生成树形结构的方法,感觉基本都会把层级写的比较死,所以在这里写一个不关联层级的生成方式(层级信息在生成树的时候赋值),依靠code和parentCode两个信息生成最终的树。
Tree.java
package patterns.structure.composite;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 用组合模式构建一棵树
*
* @author joker
* @date 2018-09-27 22:47
*/
public class Tree {
private String code;
private String name;
private String parentCode;
private Integer level;
private Tree parent;
private List<Tree> node;
public Tree() {
}
public Tree(String code, String name, String parentCode, Integer level) {
this.code = code;
this.name = name;
this.parentCode = parentCode;
this.level = level;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
/**
* 将一组无序的树组装成树形结构的数据
*
* @param treeList
* @return
*/
public static List<Tree> buildTree(List<Tree> treeList) {
if (treeList == null || treeList.size() == 0) {
return null;
}
List<Tree> trees = getRootNode(treeList);
trees.forEach(node -> node.setLevel(0));
List<Tree> parentNodes = trees;
List<Tree> subNodes;
int level = 1;
do {
treeList.removeAll(parentNodes);
subNodes = getRootNode(treeList);
if (subNodes != null && subNodes.size() > 0) {
for (Tree subNode : subNodes) {
subNode.