Java三级菜单工具类实现方式

 更新时间:2024年05月27日 10:43:44   作者:Bunny0212  
这篇文章通过实例代码给大家介绍Java三级菜单工具类实现方式,常用的三个字段,子级id、父级id、其次是数组children,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧

Java通用三级菜单工具类

通常在写三级菜单时会使用递归方式去写,但是时间长了会发现很多重复的代码一直在写,改,也就改几个名字。

实现方式

抽象属性结构

常用的三个字段,子级id、父级id、其次是数组children。

将返回对象或者是三级菜单对象实现这个类。

import java.util.List;
public interface AbstractTreeNode {
    // 子级id
    Long getId();
    // 父级id
    Long getParentId();
    // 子级数组
    void setChildren(List<? extends AbstractTreeNode> children);
}
代码示例
import cn.bunny.tree.AbstractTreeNode;
import lombok.Data;
import java.util.List;
@Data
public class ForumBoardVo implements AbstractTreeNode {
    private Long id;
    // 父级板块ID
    private Long parentId;
    // 板块名
    private String boardName;
    // 封面
    private String cover;
    // 描述
    private String boardDesc;
    // 排序
    private Integer sort;
    // 0:只允许管理员发帖 1:任何人可以发帖
    private Boolean postType;
    private List<ForumBoardVo> children;
    @Override
    public void setChildren(List<? extends AbstractTreeNode> children) {
        this.children = (List<ForumBoardVo>) children;
    }
}

构建树型结构

import java.util.ArrayList;
import java.util.List;
public class TreeBuilder<T extends AbstractTreeNode> {
    /**
     * 构建属性结构
     *
     * @param nodeList 需要构建的数组
     * @return 树型结构
     */
    public List<T> buildTree(List<T> nodeList) {
        List<T> tree = new ArrayList<>();
        for (T node : nodeList) {
            if (node.getParentId() == 0) {
                node.setChildren(getChildren(node.getId(), nodeList));
                tree.add(node);
            }
        }
        return tree;
    }
    /**
     * 递归设置子级菜单
     *
     * @param nodeId   节点id
     * @param nodeList 节点列表
     * @return 子级菜单
     */
    private List<T> getChildren(Long nodeId, List<T> nodeList) {
        List<T> children = new ArrayList<>();
        for (T node : nodeList) {
            if (node.getParentId().equals(nodeId)) {
                node.setChildren(getChildren(node.getId(), nodeList));
                children.add(node);
            }
        }
        return children;
    }
}

先向正常的返回数组使用,毕竟我们是要返回VO对象,如果是直接返回数据库中对象也可,下面只做一个示例。

public List<ForumBoardVo> loadBoard() {
    // 数据库中list
    List<ForumBoard> forumBoardListDB = list();
    // 构建返回对象数组
    List<ForumBoardVo> forumBoardVoList = new ArrayList<>();
    // 树型结构返回数组
    TreeBuilder<ForumBoardVo> treeBuilder = new TreeBuilder<>();
    // 对数据库中数组进行排序,这个可有可无
    forumBoardListDB.sort(Comparator.comparing(ForumBoard::getSort));
    // 将数据库中数组一个一个塞到 List<ForumBoardVo> 的数组中
    forumBoardListDB.forEach(forumBoard -> {
        ForumBoardVo forumBoardVo = new ForumBoardVo();
        BeanUtils.copyProperties(forumBoard, forumBoardVo);
        forumBoardVoList.add(forumBoardVo);
    });
    // 最后将调用树形结构对象,构建树型结构。
    return treeBuilder.buildTree(forumBoardVoList);
}

到此这篇关于Java通用三级菜单工具类的文章就介绍到这了,更多相关Java三级菜单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现通过时间获取8位验证码

    Java实现通过时间获取8位验证码

    这篇文章主要为大家详细介绍了Java如何通过时间获取8位验证码(每两个小时生成一个),文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 详解JAVA 内存管理

    详解JAVA 内存管理

    这篇文章主要介绍了JAVA 内存管理的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java中强引用,软引用,弱引用概念解析

    Java中强引用,软引用,弱引用概念解析

    这篇文章主要介绍了Java中强引用,软引用,弱引用概念解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 更改eclipse的JDK版本详细步骤

    更改eclipse的JDK版本详细步骤

    我们用eclipse在做项目的时候会切换jdk版本,本地运行的项目所使用的jdk版本比Linux服务器高(低),需要调低(高)JDK版本,这篇文章主要给大家介绍了关于如何更改eclipse的JDK版本的相关资料,需要的朋友可以参考下
    2023-11-11
  • java实现简单超市管理系统

    java实现简单超市管理系统

    这篇文章主要为大家详细介绍了java实现简单超市管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • spring的父子容器及配置详解

    spring的父子容器及配置详解

    本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念、使用场景和用法,有兴趣的可以了解一下
    2018-01-01
  • 因BigDecimal类型数据引出的问题详析

    因BigDecimal类型数据引出的问题详析

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算,下面这篇文章主要给大家介绍了因BigDecimal类型数据引出的问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-08-08
  • java实现飞机大战游戏

    java实现飞机大战游戏

    这篇文章主要为大家详细介绍了java实现飞机大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • SpringBoot 集成 Memcached的方法示例

    SpringBoot 集成 Memcached的方法示例

    这篇文章主要介绍了SpringBoot 集成 Memcached的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Spring中的依赖注入DI源码详细解析

    Spring中的依赖注入DI源码详细解析

    这篇文章主要介绍了Spring中的依赖注入DI源码详细解析,Spring的依赖注入(Dependency Injection,DI)是Spring框架核心的一部分,它是实现控制反转(Inversion of Control,IoC)的一种方式,需要的朋友可以参考下
    2023-11-11

最新评论