Tree对象结构:
public class B {
private Integer id;
private String label;
private Integer nodeType;
private List<B> children; //关键字段
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getLabel() { return label; }
public void setLabel(String label) { this.label = label; }
public Integer getNodeType() { return nodeType; }
public void setNodeType(Integer nodeType) { this.nodeType = nodeType; }
public List<B> getChildren() {
return children;
}
public void setChildren(List<B> children) {
this.children = children;
}
}
方法:
注:结构必须为B类结构样式
/**
* 迭代获取所有List集合
* @param list Tree型数据,
* @param results 从根节点到当前data节点的 B 对象的集合(results集合中的所有children都为null)
* @return
*/
private List<List<B>> recursiveList(List<B> list, List<B> results) {
//声明返回对象
List<List<B>> listList = new ArrayList<>();
if (StringUtils.isNotEmpty(list)) {
for (B tree : list) {
//声明一个List,用来存放从根节点到当前节点 这一条路径上的B对象
List<B> treeVOList = new ArrayList<>();
treeVOList.addAll(results);//将前面路径上的B对象添加进 List
B treeVO = new B();
//把tree复制到treeVO
BeanUtils.copyProperties(tree, treeVO);
treeVO.setChildren(null);//把treeVO中的children赋值为null,tree中的不变
treeVOList.add(treeVO);//将不包含children属性的临时对象放进 treeVOList
//treeVOList 中已经保存完整了从根到当前节点一整条路径上的所有B对象了。
//检查当前节点B对象的children属性,如果children为空,则表示当前节点为叶子节点,
if (StringUtils.isEmpty(tree.getChildren())) {
listList.add(treeVOList);
} else {//不为空,说明当前节点不是叶子节点,把treeVOList传递给下一轮进行迭代
List<List<B>> recursiveList = recursiveList(tree.getChildren(), treeVOList);
//迭代结束对返回数据 recursiveList 进行追加保存,确保不会丢失
listList.addAll(recursiveList);
}
}
}
return listList;
}