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;
}