1. /**
    2. * 树列表Domain类的接口
    3. */
    4. public interface TreeItemInterface {
    5. Integer getId();
    6. Integer getParentId();
    7. List getChildren();
    8. void setChildren(List children);
    9. }
    1. /**
    2. * 树列表帮助类
    3. *
    4. * @param <T>
    5. */
    6. public class TreeListHelper<T extends TreeItemInterface> {
    7. /**
    8. * 获取带本节点的树列表
    9. *
    10. * @param sourceList
    11. * @param parentId
    12. * @return
    13. */
    14. public List<T> getTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) {
    15. List<T> targetList = new ArrayList<>();
    16. //先把自己获取
    17. T rootTreeItem = null;
    18. for (TreeItemInterface ti : sourceList) {
    19. if (ti.getId() == parentId) {
    20. rootTreeItem = (T) ti;
    21. }
    22. }
    23. if (rootTreeItem != null) {
    24. //再把子项获取
    25. rootTreeItem.setChildren(getChildrenTreeListByParentId(sourceList, parentId));
    26. targetList.add(rootTreeItem);
    27. }
    28. return targetList;
    29. }
    30. /**
    31. * 获取不带本节点的树列表
    32. *
    33. * @param sourceList
    34. * @param parentId
    35. * @return
    36. */
    37. public List<T> getChildrenTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) {
    38. List<TreeItemInterface> targetList = new ArrayList<>();
    39. for (TreeItemInterface item : sourceList) {
    40. if (item.getParentId() == parentId) {
    41. boolean hasChildren = false;
    42. for (TreeItemInterface tempItem : sourceList) {
    43. if (tempItem.getParentId() == item.getId()) {
    44. hasChildren = true;
    45. break;
    46. }
    47. }
    48. if (hasChildren) {
    49. item.setChildren(getChildrenTreeListByParentId(sourceList, item.getId()));
    50. }
    51. targetList.add(item);
    52. }
    53. }
    54. //转换为目标类型
    55. List<T> tList = new ArrayList<>();
    56. for (TreeItemInterface ti : targetList) {
    57. tList.add((T) ti);
    58. }
    59. return tList;
    60. }
    61. }