package com.nuojing.admin.service.impl; import com.nuojing.admin.domain.entity.Menu; import com.nuojing.admin.domain.vo.MenuVO; import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; final class MenuTreeBuilder { private MenuTreeBuilder() { } static List build(List menus) { Map nodeMap = new LinkedHashMap<>(); menus.stream() .sorted(Comparator.comparing(Menu::getSort, Comparator.nullsLast(Integer::compareTo))) .forEach(menu -> nodeMap.put(menu.getId(), toVO(menu))); List roots = new ArrayList<>(); nodeMap.values().forEach(menu -> { MenuVO parent = nodeMap.get(menu.getParentId()); if (parent == null || menu.getParentId() == null || menu.getParentId() == 0) { roots.add(menu); } else { parent.getChildren().add(menu); } }); return roots; } private static MenuVO toVO(Menu menu) { MenuVO vo = new MenuVO(); vo.setId(menu.getId()); vo.setParentId(menu.getParentId()); vo.setTitle(menu.getMenuName()); vo.setPath(menu.getPath()); vo.setComponent(menu.getComponent()); vo.setName(menu.getRouteName()); vo.setIcon(menu.getIcon()); vo.setPermission(menu.getPermission()); vo.setMenuType(menu.getMenuType()); vo.setSort(menu.getSort()); vo.setStatus(menu.getStatus()); vo.setHidden(menu.getHidden() != null && menu.getHidden() == 1); return vo; } }