/** * 树列表Domain类的接口 */public interface TreeItemInterface { Integer getId(); Integer getParentId(); List getChildren(); void setChildren(List children);}
/** * 树列表帮助类 * * @param <T> */public class TreeListHelper<T extends TreeItemInterface> { /** * 获取带本节点的树列表 * * @param sourceList * @param parentId * @return */ public List<T> getTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) { List<T> targetList = new ArrayList<>(); //先把自己获取 T rootTreeItem = null; for (TreeItemInterface ti : sourceList) { if (ti.getId() == parentId) { rootTreeItem = (T) ti; } } if (rootTreeItem != null) { //再把子项获取 rootTreeItem.setChildren(getChildrenTreeListByParentId(sourceList, parentId)); targetList.add(rootTreeItem); } return targetList; } /** * 获取不带本节点的树列表 * * @param sourceList * @param parentId * @return */ public List<T> getChildrenTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) { List<TreeItemInterface> targetList = new ArrayList<>(); for (TreeItemInterface item : sourceList) { if (item.getParentId() == parentId) { boolean hasChildren = false; for (TreeItemInterface tempItem : sourceList) { if (tempItem.getParentId() == item.getId()) { hasChildren = true; break; } } if (hasChildren) { item.setChildren(getChildrenTreeListByParentId(sourceList, item.getId())); } targetList.add(item); } } //转换为目标类型 List<T> tList = new ArrayList<>(); for (TreeItemInterface ti : targetList) { tList.add((T) ti); } return tList; }}