TreeTest

  1. package cn.visight.tree;
  2. import cn.hutool.json.JSONUtil;
  3. import cn.visight.modules.sys.entity.SysMenuEntity;
  4. import org.junit.Test;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.stream.Collectors;
  9. public class TreeTest {
  10. @Test
  11. public void testStreamTree() {
  12. List<SysMenuEntity> list = new ArrayList<>();
  13. SysMenuEntity s01 = getEntity(1L,0L,"0-1");
  14. SysMenuEntity s12 = getEntity(2L,1L,"1-2");
  15. SysMenuEntity s13 = getEntity(3L,1L,"1-3");
  16. SysMenuEntity s14 = getEntity(4L,1L,"1-4");
  17. SysMenuEntity s25 = getEntity(5L,2L,"2-5");
  18. SysMenuEntity s36 = getEntity(6L,3L,"3-6");
  19. SysMenuEntity s37 = getEntity(7L,3L,"3-7");
  20. SysMenuEntity s38 = getEntity(8L,3L,"3-8");
  21. SysMenuEntity s89 = getEntity(9L,8L,"8-9");
  22. SysMenuEntity s810 = getEntity(10L,8L,"8-10");
  23. list.add(s01);
  24. list.add(s12);
  25. list.add(s13);
  26. list.add(s14);
  27. list.add(s25);
  28. list.add(s36);
  29. list.add(s37);
  30. list.add(s38);
  31. list.add(s89);
  32. list.add(s810);
  33. List<TreeMenu> treeMenuList = new ArrayList<>();
  34. //转换数据,这个是前端需要的格式。
  35. list.forEach(t->{
  36. TreeMenu treeMenuNode = new TreeMenu();
  37. treeMenuNode.setId(t.getId());
  38. treeMenuNode.setParentId(t.getPid());
  39. treeMenuNode.setName(t.getName());
  40. treeMenuList.add(treeMenuNode);
  41. });
  42. Map<Long, List<TreeMenu>> groupMap = treeMenuList.stream().collect(Collectors.groupingBy(TreeMenu::getParentId));
  43. treeMenuList.forEach(treeMenu -> treeMenu.setChildren(groupMap.get(treeMenu.getId())));
  44. List<TreeMenu> collect = treeMenuList.stream()
  45. .filter(treeMenu -> treeMenu.getParentId().equals(0L)).collect(Collectors.toList());
  46. System.out.println(JSONUtil.toJsonStr(collect));
  47. }
  48. public static SysMenuEntity getEntity(Long id, Long pid,String name) {
  49. SysMenuEntity s1 = new SysMenuEntity();
  50. s1.setId(id);
  51. s1.setPid(pid);
  52. s1.setName(name);
  53. return s1;
  54. }
  55. }

TreeMenu

  1. package cn.visight.tree;
  2. import java.util.List;
  3. public class TreeMenu {
  4. private Long id;
  5. private Long parentId;
  6. private String name;
  7. private List<TreeMenu> children;
  8. public Long getId() {
  9. return id;
  10. }
  11. public void setId(Long id) {
  12. this.id = id;
  13. }
  14. public Long getParentId() {
  15. return parentId;
  16. }
  17. public void setParentId(Long parentId) {
  18. this.parentId = parentId;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public List<TreeMenu> getChildren() {
  27. return children;
  28. }
  29. public void setChildren(List<TreeMenu> children) {
  30. this.children = children;
  31. }
  32. }