树菜单 递归写法

树菜单 递归写法

树菜单 递归写法

  • 树菜单 递归写法
  • 返回导航页
      • 1、先整个demo看结果
      • 2、代码:返回对象实体定义
      • 3、代码:递归构造返回实体

返回导航页

返回导航页

1、先整个demo看结果

public static void main(String[] args) {
        List<CategoryEntity> categoryEntities = new ArrayList<>();

        CategoryEntity categoryEntity1 = new CategoryEntity();
        categoryEntity1.setCatId(1L);
        categoryEntity1.setParentCid(0L);
        categoryEntity1.setName("果蔬");
        categoryEntities.add(categoryEntity1);
        CategoryEntity categoryEntity4 = new CategoryEntity();
        categoryEntity4.setCatId(4L);
        categoryEntity4.setParentCid(1L);
        categoryEntity4.setName("香蕉");
        categoryEntities.add(categoryEntity4);
        CategoryEntity categoryEntity5 = new CategoryEntity();
        categoryEntity5.setCatId(5L);
        categoryEntity5.setParentCid(1L);
        categoryEntity5.setName("苹果");
        categoryEntities.add(categoryEntity5);


        CategoryEntity categoryEntity2 = new CategoryEntity();
        categoryEntity2.setCatId(2L);
        categoryEntity2.setParentCid(0L);
        categoryEntity2.setName("肉禽蛋奶");
        categoryEntities.add(categoryEntity2);
        CategoryEntity categoryEntity6 = new CategoryEntity();
        categoryEntity6.setCatId(6L);
        categoryEntity6.setParentCid(2L);
        categoryEntity6.setName("猪肉");
        categoryEntities.add(categoryEntity6);
        CategoryEntity categoryEntity7 = new CategoryEntity();
        categoryEntity7.setCatId(7L);
        categoryEntity7.setParentCid(2L);
        categoryEntity7.setName("鹿肉");
        categoryEntities.add(categoryEntity7);
        CategoryEntity categoryEntity11 = new CategoryEntity();
        categoryEntity11.setCatId(11L);
        categoryEntity11.setParentCid(7L);
        categoryEntity11.setName("鹿鞭");
        categoryEntities.add(categoryEntity11);


        CategoryEntity categoryEntity3 = new CategoryEntity();
        categoryEntity3.setCatId(3L);
        categoryEntity3.setParentCid(0L);
        categoryEntity3.setName("饮料酒水");
        categoryEntities.add(categoryEntity3);
        CategoryEntity categoryEntity8 = new CategoryEntity();
        categoryEntity8.setCatId(8L);
        categoryEntity8.setParentCid(3L);
        categoryEntity8.setName("ROI");
        categoryEntities.add(categoryEntity8);
        CategoryEntity categoryEntity9 = new CategoryEntity();
        categoryEntity9.setCatId(9L);
        categoryEntity9.setParentCid(3L);
        categoryEntity9.setName("茅台");
        categoryEntities.add(categoryEntity9);
        CategoryEntity categoryEntity10 = new CategoryEntity();
        categoryEntity10.setCatId(10L);
        categoryEntity10.setParentCid(9L);
        categoryEntity10.setName("茅台王子");
        categoryEntities.add(categoryEntity10);
        CategoryEntity categoryEntity12 = new CategoryEntity();
        categoryEntity12.setCatId(12L);
        categoryEntity12.setParentCid(9L);
        categoryEntity12.setName("茅台鹿鞭王子酒");
        categoryEntities.add(categoryEntity12);


        List<CategoryEntity> treeMenu = listWithTree(categoryEntities);
        System.out.println(treeMenu);

    }

树菜单 递归写法_第1张图片

说明:饮料就说里面有细的分类

饮料酒水— > 茅台 — > 茅台王子鹿鞭酒,茅台王子酒

树菜单 递归写法_第2张图片

2、代码:返回对象实体定义

class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

    /**
     * 分类id
     */
    @TableId
    private Long catId;
//	private Long id;
    /**
     * 分类名称
     */
    private String name;
    /**
     * 父分类id
     */
    private Long parentCid;

    /**
     * 子分类
     * 不是数据表里的属性
     * 将当前菜单的子分类都保存到里面
     * */
    @TableField(exist =false)
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<CategoryEntity> children;
    /**
     * 层级
     */
    private Integer catLevel;
    /**
     * 是否显示[0-不显示,1显示]
     */
    private Integer showStatus;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 图标地址
     */
    private String icon;
    /**
     * 计量单位
     */
    private String productUnit;
    /**
     * 商品数量
     */
    private Integer productCount;

}

3、代码:递归构造返回实体


public class CategoryServiceImpl {
     public static void main(String[] args) {
     // 把上面main方法内容放过来吧
    }

     public static List<CategoryEntity> listWithTree(List<CategoryEntity> categoryEntities) {
           // 1 查出所有分类
   //        List categoryEntities = new ArrayList<>();
           // 2 组装成父子的树型结构
           // 2.1 找到所有一级分类
           List<CategoryEntity> level1Menus = categoryEntities.stream().filter(
                   // 找到一级
                   categoryEntity -> categoryEntity.getParentCid() == 0
           ).map(menu -> {
               // 把当前的child属性改了之后重新返回
               menu.setChildren(getChildren(menu, categoryEntities));
               return menu;
           })
             /*      .sorted((menu1, menu2) ->
                   menu1.getSort() - menu2.getSort())
                   */
                   .collect(Collectors.toList());
   
           return level1Menus;
   //        return categoryEntities;
       }
   
       /**
        * @param root
        * @param all
        * @return java.util.List
        * @Author 骑蜗牛的羊
        * @Description:获取某一个菜单的子菜单 * 在all里找root的子菜单
        */
       private static List<CategoryEntity> getChildren(CategoryEntity root, List<CategoryEntity> all) {
           List<CategoryEntity> children = all.stream().filter(categoryEntity -> {
               // 找到当前id的子菜单
               return categoryEntity.getParentCid() == root.getCatId();
           }).map(categoryEntity -> {
               // 1 找到子菜单,递归找法
               categoryEntity.setChildren(getChildren(categoryEntity, all));
               return categoryEntity;
           })
            /*       .sorted((menu1, menu2) -> {
               // 2 菜单排序
               return menu1.getSort() - menu2.getSort();
               // menu1.getSort()==null?0;menu1.getSort()
           })*/
                   .collect(Collectors.toList());
           return children;
       }
}

你可能感兴趣的:(java开发基础知识,java,数据结构)