MenuTreeBuilder.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.nuojing.admin.service.impl;
  2. import com.nuojing.admin.domain.entity.Menu;
  3. import com.nuojing.admin.domain.vo.MenuVO;
  4. import java.util.ArrayList;
  5. import java.util.Comparator;
  6. import java.util.LinkedHashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. final class MenuTreeBuilder {
  10. private MenuTreeBuilder() {
  11. }
  12. static List<MenuVO> build(List<Menu> menus) {
  13. Map<Long, MenuVO> nodeMap = new LinkedHashMap<>();
  14. menus.stream()
  15. .sorted(Comparator.comparing(Menu::getSort, Comparator.nullsLast(Integer::compareTo)))
  16. .forEach(menu -> nodeMap.put(menu.getId(), toVO(menu)));
  17. List<MenuVO> roots = new ArrayList<>();
  18. nodeMap.values().forEach(menu -> {
  19. MenuVO parent = nodeMap.get(menu.getParentId());
  20. if (parent == null || menu.getParentId() == null || menu.getParentId() == 0) {
  21. roots.add(menu);
  22. } else {
  23. parent.getChildren().add(menu);
  24. }
  25. });
  26. return roots;
  27. }
  28. private static MenuVO toVO(Menu menu) {
  29. MenuVO vo = new MenuVO();
  30. vo.setId(menu.getId());
  31. vo.setParentId(menu.getParentId());
  32. vo.setTitle(menu.getMenuName());
  33. vo.setPath(menu.getPath());
  34. vo.setComponent(menu.getComponent());
  35. vo.setName(menu.getRouteName());
  36. vo.setIcon(menu.getIcon());
  37. vo.setPermission(menu.getPermission());
  38. vo.setMenuType(menu.getMenuType());
  39. vo.setSort(menu.getSort());
  40. vo.setStatus(menu.getStatus());
  41. vo.setHidden(menu.getHidden() != null && menu.getHidden() == 1);
  42. return vo;
  43. }
  44. }