@Data public class Tree { private Integer id; private String name; private Integer age; private String sex; private Integer parentId; private List<Tree> children; public String getId() { if (this.id == null) { return null; } else { return this.id; } } public String getParentId() { if (this.parentId == null) { return null; } else { return this.parentId; } } public void setChildTreeList(List<Tree> treeList) { this.children = treeList; } }
@Data public class TreeBuildFactory<T> { //頂級(jí)節(jié)點(diǎn)的父節(jié)點(diǎn)id(默認(rèn)-1) private Integer rootParentId = -1; public TreeBuildFactory() {} public TreeBuildFactory(Integer rootParentId) { this.rootParentId = rootParentId; } //傳過來一個(gè)List集合 public List<T> treeBuild(List<T> treeList) { //將每個(gè)節(jié)點(diǎn)的構(gòu)造一個(gè)子樹 for (T tree : treeList) { this.buildChildTreeList(treeList, tree, new ArrayList<>()); } //只保留上級(jí)是根節(jié)點(diǎn)的節(jié)點(diǎn),也就是只留下所有一級(jí)節(jié)點(diǎn) ArrayList<T> results = new ArrayList<>(); for (T tree : treeList) { if (tree.getParentId().equals(rootParentId)) { results.add(tree); } } return results; } //獲取樹形集合的主要循環(huán)體 private void buildChildTreeList(List<T> treeList, T tree, List<T> list) { if (treeList == null || tree == null) { return; } //獲取下一級(jí)的集合 List<T> childTreeList = getChildTreeList(treeList, tree); if (childTreeList.size() > 0) { for (T childTreeListItem : childTreeList) { buildChildTreeList(treeList, childTreeListItem, new ArrayList<>()); } } list.addAll(childTreeList); tree.setChildTreeList(list); } //獲取下一級(jí)的集合 private List<T> getChildTreeList(List<T> treeList, T tree) { List<T> childTreeList = new ArrayList<>(); for (T treeListItem : treeList) { if (treeListItem.getParentId().equals(tree.getId())) { childTreeList.add(treeListItem); } } return childTreeList; } }
浙公網(wǎng)安備 33010602011771號(hào)