前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >递归树

递归树

作者头像
用户5927264
发布2021-04-19 16:06:22
4740
发布2021-04-19 16:06:22
举报
文章被收录于专栏:OSChinaOSChina

1.定义基本树结构

代码语言:javascript
复制
package com.un.common.utils;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

@ApiModel("社区结构树")
public class StructTree {
    @ApiModelProperty("社区结构id")
    private String csId;

    @ApiModelProperty("社区id")
    private String csCoId;

    @ApiModelProperty("社区结构parentId")
    private String csParentId;

    @ApiModelProperty("社区结构名称")
    private String csName;

    @ApiModelProperty("社区结构全名称")
    private String csFullName;

    @ApiModelProperty("是否为最后一级,1是 0否")
    private Integer isLast;

    @ApiModelProperty("子树")
    List<com.unwulian.communitystruct.domain.StructTree> structTreeList;

    public String getCsFullName() {
        return csFullName;
    }

    public void setCsFullName(String csFullName) {
        this.csFullName = csFullName;
    }

    public String getCsCoId() {
        return csCoId;
    }

    public void setCsCoId(String csCoId) {
        this.csCoId = csCoId;
    }

    public String getCsName() {
        return csName;
    }

    public void setCsName(String csName) {
        this.csName = csName;
    }

    public String getCsId() {
        return csId;
    }

    public void setCsId(String csId) {
        this.csId = csId;
    }

    public String getCsParentId() {
        return csParentId;
    }

    public void setCsParentId(String csParentId) {
        this.csParentId = csParentId;
    }

    public Integer getIsLast() {
        return isLast;
    }

    public void setIsLast(Integer isLast) {
        this.isLast = isLast;
    }

    public List<com.unwulian.communitystruct.domain.StructTree> getStructTreeList() {
        return structTreeList;
    }

    public void setStructTreeList(List<com.unwulian.communitystruct.domain.StructTree> structTreeList) {
        this.structTreeList = structTreeList;
    }

    @Override
    public String toString() {
        return "StructTree{" +
                "csId='" + csId + '\'' +
                ", csCoId='" + csCoId + '\'' +
                ", csParentId='" + csParentId + '\'' +
                ", csName='" + csName + '\'' +
                ", csFullName='" + csFullName + '\'' +
                ", isLast=" + isLast +
                ", struceTreeList=" + structTreeList +
                '}';
    }
}

2.定义工具类:

代码语言:javascript
复制
package com.un.common.utils;

import com.unwulian.communitystruct.domain.StructTree;

import java.util.ArrayList;
import java.util.List;

/**
 * 操作社区结构数操作
 *
 * @author shiye
 * @create 2021-04-15 16:21
 */
public class CsTreeNodeUtils {

    /**
     * 构建数,把社区结构List构建成一颗树
     *
     * @param treeNodes
     * @return
     */
    public static List<com.unwulian.communitystruct.domain.StructTree> buildByRecursive(List<StructTree> treeNodes) {
        List<StructTree> trees = new ArrayList<StructTree>();
        for (StructTree treeNode : treeNodes) {
            if ("CS0".equals(treeNode.getCsParentId())) {
                trees.add(findChildren(treeNode, treeNodes));
            }
        }
        return trees;
    }

    /**
     * 递归添加到指定节点中
     *
     * @param treeNode
     * @param treeNodes
     * @return
     */
    public static com.unwulian.communitystruct.domain.StructTree findChildren(StructTree treeNode, List<StructTree> treeNodes) {
        for (StructTree it : treeNodes) {
            if (treeNode.getCsId().equals(it.getCsParentId())) {
                if (treeNode.getStructTreeList() == null) {
                    treeNode.setStructTreeList(new ArrayList<StructTree>());
                }
                treeNode.getStructTreeList().add(findChildren(it, treeNodes));
            }
        }
        return treeNode;
    }

    /**
     * 返回指定社区下的所有子节点
     *
     * @param csId
     * @param treeList
     * @return
     */
    public static StructTree getTreeNode(String csId, List<StructTree> treeList) {
        for (StructTree structTree : treeList) {
            if (csId.equals(structTree.getCsId())) {
                return structTree;
            } else {
                List<StructTree> tempStructTreeList = structTree.getStructTreeList();
                if(tempStructTreeList != null){
                    StructTree treeNode = getTreeNode(csId, tempStructTreeList);
                    if (treeNode != null) {
                        return treeNode;
                    }
                }
            }
        }
        return null;
    }
}

3.测试方式

代码语言:javascript
复制
//把普通的list结构转换成树节点
        List<StructTree> treeList = CsTreeNodeUtils.buildByRecursive(structTreeList);
        //根据节点中的摸一个节点获取当前节点以及所有子节点
        StructTree treeNode = CsTreeNodeUtils.getTreeNode(csId, treeList);


//跟新选中节点以及其下所有子节点
/**
     * 跟新子节点的所有csFullName
     *
     * @param treeNodeList
     */
    public void updateCsFullName(List<StructTree> treeNodeList, StructTree parentNode) {
        if (CollectionUtils.isEmpty(treeNodeList)) {
            return;
        }
        for (StructTree structTree : treeNodeList) {
            String csFullName = parentNode.getCsFullName() + structTree.getCsName();
            TBasCommunitystruct communitystruct = new TBasCommunitystruct();
            communitystruct.setCsId(structTree.getCsId());
            communitystruct.setCsFullname(csFullName);
            tBasCommunitystructMapper.updateTBasCommunitystruct(communitystruct);
            //当前节点的csFullName也跟新掉
            structTree.setCsFullName(csFullName);
            if (!CollectionUtils.isEmpty(structTree.getStructTreeList())) {
                //自旋跟新子数据节点
                updateCsFullName(structTree.getStructTreeList(), structTree);
            }
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档