0
点赞
收藏
分享

微信扫一扫

02-结构型设计模式(共7种)

代码小姐 2024-05-24 阅读 7

Java通用三级菜单工具类

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

实现方式

抽象属性结构

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

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

import java.util.List;

public interface AbstractTreeNode {
    // 子级id
    Long getId();

    // 父级id
    Long getParentId();

    // 子级数组
    void setChildren(List<? extends AbstractTreeNode> 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;
    }
}
举报

相关推荐

0 条评论