方法一
public List<Catalog> getMenuList() {
List<Catalog> childMenuList = catalogDao.getChildMenuList();
List<Catalog> parentMenuList = catalogDao.getParentMenuList();
if (childMenuList != null && childMenuList.size() > 0) {
// 过滤条件map,指定map预期大小为非顶级类目集合的size
Map mp = new HashMap(childMenuList.size());
// 循环顶级类目插入子类目
parentMenuList.forEach(iepMenuDTO -> {
getChildMenu(iepMenuDTO, childMenuList, mp);
});
}
return parentMenuList;
}
private void getChildMenu(Catalog catalog, List<Catalog> childMenuList, Map map) {
List<Catalog> childList = new ArrayList<Catalog>();
childMenuList.stream()
.filter(c -> !map.containsKey(c.getId()))
.filter(c -> c.getParentId().equals(catalog.getId()))
.forEach(c -> {
// 放入map,递归循环时,可以跳过这个子类目,提高循环效率
map.put(c.getId(), c.getParentId());
// 获取当前类目的子类目
getChildMenu(c, childMenuList, map);
// 加入字类目集合
childList.add(c);
});
catalog.setChildren(childList);
}
方法二
public List<Catalog> getMenuList() {
List<Catalog> resultList = new ArrayList<>();
List<Catalog> parentMenuList = catalogDao.getParentMenuList();
parentMenuList.forEach(parentMenu -> {
Catalog childMenu = getChildMenu1(parentMenu);
resultList.add(childMenu);
});
return resultList;
}
private Catalog getChildMenu1(Catalog parentMenu) {
List<Catalog> childMenuList = catalogDao.getChildMenuList1(parentMenu.getId());
parentMenu.setChildren(childMenuList);
childMenuList.stream().forEach(childMenu -> {
getChildMenu(childMenu);
});
return parentMenu;
}
根据子节点获取父节点数据
@GetMapping("/getCatalog")
public List<Catalog> getCatalog() {
List<Catalog> catalogList = new ArrayList<>();
List<Catalog> catalogs = catalogMapper.childNodes();
// 可以使用set对集合进行去重 避免查询对于同一父节点下子节点,查询父节点时出现多次无效查询
Set<String> set = new HashSet<>();
for (Catalog catalog : catalogs) {
catalogList.add(catalog);
forBack(catalogList, catalog.getParentId(), set);
catalogList = catalogList.stream().sorted(Comparator.comparing(Catalog::getId)).collect(Collectors.toList());
}
return catalogList;
}
private void forBack(List<Catalog> catalog, String parentId, Set<String> set) {
if (!set.contains(parentId)) {
Catalog catalogPar = catalogMapper.getCatalog(parentId);
if (!ObjectUtils.isEmpty(catalogPar)) {
catalog.add(catalogPar);
forBack(catalog, catalogPar.getParentId(), set);
}
set.add(parentId);
}
}