美文网首页Java学习笔记
Java递归--无限级分类

Java递归--无限级分类

作者: 想象之中丶意料之外 | 来源:发表于2022-01-18 16:18 被阅读0次

递归

  • 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等。凡是递归的函数,都是可计算的,即能行的。

  • 古典递归函数,是一种定义在自然数集合上的函数,它的未知值往往要通过有限次运算回归到已知值来求出,故称为“递归”。它是古典递归函数论的研究对象。


无限级分类--递归分析

  1. 通过1级分类,找到当前分类下的子集分类。
  2. 当找到一个子分类时,可能该子分类也有子集分类,所有再找这个子分类的子集分类。
  3. 如此反复,即完成,所有分类的归纳。

Java 实现

/**
 * 分类节点Bean
 */
@Data
public class TreeNode {
    // 分类名
    private String name;
    // 分类id
    private String id;
    // 父分类id
    private String parentId;
    // 子分类集合
    private List<TreeNode> children;
}

/**
  * 分类 处理方法。将数据库结果,处理成分类数据结构
  * @param list 数据库数据
 * @return 整理后的分类数据结构
 */
private List<TreeNode> doTreeNodes(List<Resources> list) {
    // 将数据整理成 TreeNode
    List<TreeNode> treeNodes = new ArrayList<>();
    for (Resources item : list) {
        TreeNode treeNode = new TreeNode();
        treeNode.setId(item.getId());
        treeNode.setParentId(item.getParentid());
        treeNode.setName(item.getName());
        treeNodes.add(treeNode);
    }
        
    // 声明存储新的TreeNodes变量
    List<TreeNode> newTreeNodes = new ArrayList<>();
    for (TreeNode treeNode : treeNodes) {
        // 从1级分类开始,一个一个往下找
        if (StrUtil.isBlank(treeNode.getParentId())) {
            newTreeNodes.add(findChildren(treeNode, treeNodes));
        }
    }
    // 返回最后结果
    return newTreeNodes;
}

/**
 * 递归算法,查找当前Node下的一个子节点,
 *                    并接着找该子节点下的子节点
 *
 * @param cNode    当前Node节点
 * @param nodeList Node节点数组
 * @return 返回当前节点
 */
private TreeNode findChildren(TreeNode cNode, List<TreeNode> nodeList) {
    for (TreeNode node : nodeList) {
        // 找到属于当前Node的子Node
        if (cNode.getId().equals(node.getParentId())) {
            // 初始化当前Node中子Node结合(TreeNode中children属性初始化)
            if (null == cNode.getChildren()) {
                cNode.setChildren(new ArrayList<>());
            }
            // 将当前子节点,作为当前节点。让程序接着找该子节点的子节点
            cNode.getChildren().add(findChildren(node, nodeList));
        }
    }
    return cNode;
}

参考:Java无限级分类递归法

相关文章

网友评论

    本文标题:Java递归--无限级分类

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