美文网首页
菜单树常用树形菜单工具类

菜单树常用树形菜单工具类

作者: 不二不二熊 | 来源:发表于2020-08-21 23:11 被阅读0次
package com.cus.integration.util;

import com.cus.integration.constant.ErrorCodeEnum;
import com.cus.integration.dto.CategoryDTO;
import com.cus.integration.exceptiom.BizException;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
* @author zhaojiejun
* @version V1.0
* @date 2020/7/10 9:54 下午
* @description 树形结构工具类
**/
public class TreeUtil {

 /**
  * 得到该节点的所有父节点集合(不包含自身节点)
  *
  * @param category        自身节点
  * @param allCategory     数据源
  * @param categoryDTOList 容器
  * @return List<CategoryDTO>
  * @throws BizException 异常
  */
 public static List<CategoryDTO> getParentCategoryList(CategoryDTO category, List<CategoryDTO> allCategory, List<CategoryDTO> categoryDTOList) throws BizException {
     if (category.getParentId() == 0) {
         return categoryDTOList;
     }
     Optional<CategoryDTO> optional = allCategory.stream().filter(x -> Objects.equals(x.getId(), category.getParentId()))
             .findFirst();
     if (optional.isPresent()) {
         CategoryDTO categoryDTO = optional.get();
         categoryDTOList.add(categoryDTO);
         return getParentCategoryList(categoryDTO, allCategory, categoryDTOList);
     } else {
         throw new BizException(ErrorCodeEnum.CATEGORY_NOT_FOUND);
     }

 }

 /**
  * 格式化类目树
  *
  * @param categoryDTOList 数据源
  * @return List<CategoryDTO>
  */
 public static List<CategoryDTO> formattedTree(List<CategoryDTO> categoryDTOList) {
     if (categoryDTOList == null) {
         throw new BizException(ErrorCodeEnum.PARAM_NULL);
     } else {
         return getChildManyGroup(categoryDTOList, 0L);
     }
 }

 /**
  * 按照pid 格式化子节点
  *
  * @param categoryDTOList 数据源
  * @param pid             父ID
  * @return List<CategoryDTO>
  */
 public static List<CategoryDTO> getChildManyGroup(List<CategoryDTO> categoryDTOList, Long pid) {
     if (categoryDTOList == null || pid == null) {
         throw new BizException(ErrorCodeEnum.PARAM_NULL);
     }
     List<CategoryDTO> arr = new ArrayList<>();
     categoryDTOList.forEach(categoryDTO -> {
         if (pid.equals(categoryDTO.getParentId())) {
             categoryDTO.setChild(getChildManyGroup(categoryDTOList, categoryDTO.getId()));
             arr.add(categoryDTO);
         }
     });
     return arr;
 }

 /**
  * 树形菜单转为List(包含根节点)
  *
  * @param root       根节点
  * @param targetList 目标list
  * @param parentId   父ID
  */
 public static void treeToList(CategoryDTO root, List<CategoryDTO> targetList, Long parentId) {
     if (root == null) {
         return;
     }
     CategoryDTO d = new CategoryDTO(root.getId(), parentId);
     targetList.add(d);
     if (root.getChild() == null) {
         return;
     }
     for (CategoryDTO categoryDTO : root.getChild()) {
         treeToList(categoryDTO, targetList, d.getId());
     }
 }


 /**
  * 获取父节点方法
  * @param categoryDTO 当前节点
  * @param allCategory 节点集合
  * @return com.cus.integration.dto.CategoryDTO
  * @author zhaojiejun
  **/
 public static CategoryDTO getParentObject(CategoryDTO categoryDTO, List<CategoryDTO> allCategory) {
     if (categoryDTO == null || allCategory == null) {
         throw new BizException(ErrorCodeEnum.PARAM_NULL);
     }
     if (categoryDTO.getParentId() == 0) {
         return categoryDTO;
     }
     Optional<CategoryDTO> optional = allCategory.stream().filter(x -> Objects.equals(x.getId(), categoryDTO.getParentId()))
             .findFirst();
     if (optional.isPresent()) {
         CategoryDTO tblCategory = optional.get();
         return getParentObject(tblCategory, allCategory);
     } else {
         throw new BizException(ErrorCodeEnum.CATEGORY_NOT_FOUND);
     }
 }
}

相关文章

网友评论

      本文标题:菜单树常用树形菜单工具类

      本文链接:https://www.haomeiwen.com/subject/yzvohktx.html