1 for方法转属性结构
public class TreeTest {
public static void main(String[] args) {
List<Tree> node = forMethod(treeList);
System.out.println(node);
}
public static List<Tree> forMethod(List<Tree> treeList) {
List<Tree> rootTree = new ArrayList<>();
for (Tree tree : treeList) {
if (0 == tree.getParentId()) {
rootTree.add(tree);
}
for (Tree node : treeList) {
if (node.getParentId().equals(tree.getId())) {
if (CollectionUtils.isEmpty(tree.getChildren())) {
tree.setChildren(new ArrayList<>());
}
tree.getChildren().add(node);
}
}
}
return rootTree;
}
}
2 递归方法转树形结构
public class TreeTest {
public static void main(String[] args) {
List<Tree> node = recursionMethod(treeList);
System.out.println(node);
}
public static List<Tree> recursionMethod(List<Tree> treeList) {
List<Tree> trees = new ArrayList<>();
for (Tree tree : treeList) {
if (0 == tree.getParentId()) {
trees.add(findChildren(tree, treeList));
}
}
return trees;
}
public static Tree findChildren(Tree tree, List<Tree> treeList) {
for (Tree node : treeList) {
if (tree.getId().equals(node.getParentId())) {
if (tree.getChildren() == null) {
tree.setChildren(new ArrayList<>());
}
tree.getChildren().add(findChildren(node, treeList));
}
}
return tree;
}
}
3 stream流转树形结构
public class TreeTest {
public static void main(String[] args) {
List<Tree> node = streamMethod(0, treeList);
System.out.println(node);
}
public static List<Tree> streamMethod(Integer parentId, List<Tree> treeList) {
List<Tree> list = treeList.stream()
.filter(t -> t.getParentId().equals(parentId))
.map(item -> {
item.setChildren(streamMethod(item.getId(), treeList));
return item;
})
.collect(Collectors.toList());
return list;
}
}
public class TreeTest {
public static void main(String[] args) {
List<Tree> node = streamMethod(0, treeList);
System.out.println(node);
}
public static List<Tree> streamMethod(Integer parentId, List<Tree> treeList) {
List<Tree> list = new ArrayList<>();
Optional.ofNullable(treeList).orElse(new ArrayList<>())
.stream()
.filter(root -> root.getParentId().equals(parentId))
.forEach(tree -> {
List<Tree> children = streamMethod(tree.getId(), treeList);
tree.setChildren(children);
list.add(tree);
});
return list;
}
}