TreeUtils-集合递归树形结构数据

package com.demo.utils;


import com.demo.TreePojo;

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


/**
 * 递归封装 tree 数据
 * by CHENYB date 2022-10-25
 * @version 1.0
 */
public class TreeUtils {

    /**
     * 使用递归方法建树
     *
     * @param
     * @return
     */
    public static List<TreePojo> buildByRecursive(List<TreePojo> treePojos) {
        List<TreePojo> trees = new ArrayList<TreePojo>();

        //检查是否是伪根节点
        TreePojo pojo = treePojos.stream().min((b1, b2) -> b1.getParentPath().length() - b2.getParentPath().length()).get();

        String parentId = null;
        Iterator<TreePojo> iterator = treePojos.iterator();
        while (iterator.hasNext()){
            TreePojo next = iterator.next();
            if (next.getId().equals(pojo.getId())) {
                parentId = next.getParentId();
                next.setParentId(null);
            }
        }

        for (TreePojo treePojo : treePojos) {
            if (
                    null != treePojo &&
                            (
                                    "".equals(treePojo.getParentId()) || treePojo.getParentId() == null
                                    )
            ) {
                if (StringUtils.isNotBlank(parentId)){
                    treePojo.setParentId(parentId);
                    trees.add(findChildren(treePojo, treePojos));
                }else {
                    trees.add(findChildren(treePojo, treePojos));
                }
            }
        }
        return trees;
    }

    /**
     * 递归查找子节点
     *
     * @param
     * @return
     */
    public static TreePojo findChildren(TreePojo treePojo, List<TreePojo> treePojos) {
        for (TreePojo menuTreePojo2 : treePojos) {
            if (treePojo.getId().equals(menuTreePojo2.getParentId())) {
                if (treePojo.getChildren() == null) {
                    treePojo.setChildren(new ArrayList<TreePojo>());
                }
                //是否还有子节点,如果有的话继续往下遍历,如果没有则直接返回
                treePojo.getChildren().add(findChildren(menuTreePojo2, treePojos));
            }
        }
        return treePojo;
    }
}
package com.demo.one;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

/**
 * tree 实体
 * by CHENYB date 2022-10-26
 */

@Data
@Entity
@Table(name = "tbl_tree", schema = "demo")
public class TreeInfo extends BaseTable implements Serializable {

    private static final long serialVersionUID = 98554512600065464L;

    /*
	 * ID
	 */
	@Id
	@Column(name = "pkid")
	@ApiModelProperty("主键ID")
	private String id;

	/*
	 * 创建人
	 */
	@Column(name = "fk_create_user_id")
	@ApiModelProperty("创建人")
	private String createUserId;

	/*
	 * 更新人
	 */
	@Column(name = "fk_update_user_id")
	@ApiModelProperty("更新人")
	private String updateUserId;

	/*
	 * 创建时间
	 */
	@Column(name = "create_time")
	@ApiModelProperty("创建时间")
	private Long createTime;

	/*
	 * 更新时间
	 */
	@Column(name = "update_time")
	@ApiModelProperty("更新时间")
	private Long updateTime;

	/*
	 * 逻辑删除(1、删除;0、有效)
	 */
	@Column(name = "del")
	@ApiModelProperty("逻辑删除(1、删除;0、有效)")
	private Integer del;


    /*
     * 类型:0-文件夹,1-元素
     * 元素:汽车安全体系内是文件
     */
    @Column(name = "node_type")
    private Integer nodeType;

    /*
     * 数据类型:1:汽车安全体系
     */
    @Column(name = "data_type")
    private Integer dataType;

    /*
     * 节点名称
     */
    @Column(name = "name")
    private String name;

    /*
     * 上级节点id
     */
    @Column(name = "parent_id")
    private String parentId;

    /**
     *上级节点路径
     */
    @Column(name = "parent_path")
    private String parentPath;

    /**
     *上级节点路径名称
     */
    @Column(name = "parent_path_name")
    private String parentPathName;
}

表结构

-- tbl_tree_auth definition

CREATE TABLE `tbl_tree_auth` (
  `pkid` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键id',
  `fk_auth_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '有权限的用户',
  `fk_auth_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限路径',
  `fk_graph_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '规范图形ID',
  PRIMARY KEY (`pkid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='树形结构权限表';


-- tbl_tree definition

CREATE TABLE `tbl_tree` (
  `pkid` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键id',
  `node_type` int NOT NULL COMMENT '节点类型:0-文件夹,1-元素',
  `fk_create_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
  `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '节点名称',
  `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点id',
  `parent_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点路径',
  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
  `parent_path_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '上级节点名称',
  `data_type` int NOT NULL COMMENT '数据类型:1-汽车安全体系;2-项目文件',
  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
  `del` int NOT NULL COMMENT '删除逻辑:1:是;0:否',
  `fk_update_user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '更信人',
  PRIMARY KEY (`pkid`),
  KEY `parentGraphId` (`parent_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='树形结构信息表';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值