/**
* 使用递归方法建树
* @param treeNodes
* @return
*/
public List<NetTopologyVo> buildByRecursive( List<NetTopologyVo> treeNodes) {
List<NetTopologyVo> trees = new ArrayList<NetTopologyVo>();
for (NetTopologyVo treeNode : treeNodes) {
if ("0".equals(treeNode.getParentId())) {
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
public static NetTopologyVo findChildren(NetTopologyVo treeNode,List<NetTopologyVo> treeNodes) {
treeNode.setChildren(new ArrayList<NetTopologyVo>());
for (NetTopologyVo it : treeNodes) {
if(treeNode.getId().equals(it.getParentId())) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<NetTopologyVo>());
}
treeNode.getChildren().add(findChildren(it,treeNodes));
}
}
treeNode.setNum(treeNode.getChildren().size());
return treeNode;
}
public class Test(){
private Long id;
private Long pid;
private String name;
private List<Test> children = new ArrayList<>();
//set,get省略
}
方法list to treeList
/**
* list转treeList
* @param list
* @return
*/
public static List<Test> list2tree(List<Test> list) {
List<Test> result = new ArrayList<>();
Map<Long, Test> hash = list.stream().collect(Collectors.toMap(test -> test.getId(), test -> test));
for (Test test : list) {
Test p = hash.get(test.getPid());
if (p == null) {
result.add(test);
} else {
if (p.getChildren() == null) {
p.setChildren(new ArrayList<>());
}
p.getChildren().add(test);
}
}
return result;
}
树list转普通list,深度优先递归算法
/**
* treeList转list
* @param list
* @return
*/
public static List<Test> tree2list(List<Test> list) {
List<Test> result = new ArrayList<>();
for (Test test : list) {
List<Test> c = test.getChildren();
result.add(test);
if (!CollectionUtils.isEmpty(c)) {
result.addAll(tree2list(c));
test.setChildren(null);//
}
}
return result;
}