首页 > 其他分享 >实现文件目录结构功能

实现文件目录结构功能

时间:2024-11-01 13:59:24浏览次数:1  
标签:Node 功能 文件目录 ArrayList directoryInfo nodeMap import public 结构

@

目录

说明:该文章用于目录结构递进显示

Node

package com.geespace.microservices.directory.assets.entity;

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

import lombok.Data;

/**
 * @Author: wjq
 * @Date: 2021-03-14 13:46
 * @Version 1.0
 */
@Data
public class Node {
    /**
     * 名称
     */
    private String name;
    /**
     * id
     */
    private Long id;
    /**
     * pid
     */
    private Long pid;
    /**
     * 子目录
     */
    private List<Node> children = new ArrayList();
}

ConstructTree

package com.geespace.microservices.directory.assets.util;

import java.util.ArrayList;
import java.util.HashMap;

import com.alibaba.fastjson.JSONObject;
import com.geespace.microservices.directory.assets.dto.DirectoryAssetsDto;
import com.geespace.microservices.directory.assets.entity.Node;

import org.springframework.stereotype.Component;

/**
 * @Author: wjq
 * @Date: 2021-03-12 16:39
 * @Version 1.0
 */
@Component
public class ConstructTree {
    public static final int ROOTPID = -1;
    public static final int CAPACITY = 100;

    /**
     * constructLinks
     *
     * @param directoryList directoryList
     * @return 结果
     */
    public Node constructLinks(ArrayList<DirectoryAssetsDto> directoryList) {
        Long rootId = null;
        HashMap<Long, Node> nodeMap = new HashMap<>(CAPACITY);
        for (DirectoryAssetsDto directoryInfo:directoryList) {
            Node tempNode = new Node();
            tempNode.setId(directoryInfo.getId());
            tempNode.setName(directoryInfo.getName());
            tempNode.setPid(directoryInfo.getPid());
            nodeMap.put(directoryInfo.getId(), tempNode);
            if (directoryInfo.getPid() == ROOTPID) {
                rootId = directoryInfo.getId();
            }
        }
        for (Long key: nodeMap.keySet()) {
            Long pid = nodeMap.get(key).getPid();
            if (pid != ROOTPID) {
                nodeMap.get(pid).getChildren().add(nodeMap.get(key));
            }
        }
        Node root = nodeMap.get(rootId);
        return root;
    }

    /**
     *
     * @param node node
     * @return json
     */
    public JSONObject constructJS(Node node) {
        JSONObject jsonObject = new JSONObject();
        ArrayList<JSONObject> children = new ArrayList<>();
        for (Node child: node.getChildren()) {
            children.add(this.constructJS(child));
        }
        jsonObject.put("children", children);
        jsonObject.put("id", node.getId());
        jsonObject.put("name", node.getName());
        return jsonObject;
    }

    /**
     *
     * @param data data
     * @return jason
     */
    public JSONObject method(ArrayList<DirectoryAssetsDto> data) {
        Node root = this.constructLinks(data);
        return this.constructJS(root);
    }
}

标签:Node,功能,文件目录,ArrayList,directoryInfo,nodeMap,import,public,结构
From: https://www.cnblogs.com/bigcat26/p/18520000

相关文章

  • 2025AI插件脚本大合集V6.0最新中文版本!209+效率功能支持Illustrator 2025-CS6 Win/Mac
    AI插件脚本大合集V6.0是专为AdobeIllustrator设计的一套强大工具集,旨在提高设计师的工作效率。它支持从Illustrator2025至CS6的多个版本,并兼容Windows和Mac操作系统。以下是该插件脚本大合集中的一些常用功能,它们可以帮助设计师在各种设计任务中节省时间并提高质量。标注......
  • 无约束最优化方法基本结构-数值最优化方法-课程学习笔记-2
    无约束最优化方法的基本结构现在我们正式进入第二章的学习,在开始学习无约束最优化方法之前我们先学习几个知识.在以后的章节,如果没有特殊说明,我们总假定目标函数f(......
  • 聊聊公众号联动扫码登录功能如何实现
    大家好,我是V哥。扫码登录是个很普遍的功能,通过与公众号联动实现扫码登录功能,要怎么做呢,V哥整理了以下步骤和代码,供你参考。这里假设你已经有一个Java后端应用,并且微信开发者平台的配置也已经完成。(相信你可以根据微信开放平台的操作进行)整个流程包括二维码生成、扫码后获取微信......
  • 数据结构与算法(二叉树)
    鲸饮未吞海,剑气已横秋。 前言  这是我学习数据结构的第五份笔记,有关二叉树的知识。后期我会继续将数据结构知识的笔记补全。 上一期笔记有栈与列队,没看过的同学可以去看看:有关栈与列队的笔记https://blog.csdn.net/hsy1603914691/article/details/143064674?spm=10......
  • C语言数据结构之二叉树(BINARY TREE)链式存贮的简单实现
    C语言数据结构之二叉树(BINARYTREE)链式存贮的简单实现树型数据结构在应用中非常多,效率也非常好,只是结构相对复杂,理解起来有点儿难度!!!定义数据结构typedefstruct_BTreeNodeBTreeNode;struct_BTreeNode{intval;BTreeNode*lchild,*rchild;};自定义结构体数......
  • C语言数据结构之哈希表(HASHTABLE)的实现
    C语言数据结构之哈希表(HASHTABLE)的实现哈希表的每个节点保存的数据格式为key:value,其中key为字符串,根据字符串内容采用不同方法(哈希函数)生成一个无符号整型哈希码,根据表的长度,采用取余法,将数据存入表单元,如果此表单元中已存在数据,则以此表单元为链表头,向链表追加数据,这......
  • [BUG]Cursor Chat功能一直在转圈但是不输出信息
    问题描述时间:20241031表现在cursor中输入问题后使用chat功能,并不能得到有效回答cursor版本:解决方案:使用cursor中的Edit功能绕过chat方法:我不清楚为什么生效,但是按照下面这种路径操作确实是解决了问题我是darkchink,如果有其他疑问或者有想要交流的朋友欢......
  • 零基础Linux入门教程:系统目录结构&文件管理命令
    Linux文件管理命令与系统目录结构1.重要文件目录根目录/(根目录)系统目录/bin:存放基本命令/sbin:存放系统管理命令/etc:系统配置文件/dev:设备文件/proc:进程和内核信息/var:易变文件,如日志/lib//lib64:共享库文件用户目录/home:用户家目录/root:......
  • 从二维图像到三维重建:由运动到结构(SfM)的完整流程推导【含数学原理及推导】
    结构从运动(SfM)-稀疏特征点的3D重建1.引言由运动到结构(StructurefromMotion,SfM)是一种从二维图像序列中恢复三维结构和相机运动的技术。在SfM中,通过分析图像中稀疏的特征点,我们可以估计出相机在拍摄过程中经历的姿态变化,并重建出场景的三维几何结构。COLMAP等常用的Sf......
  • C++ 手撕--基本数据结构的简单实现
    C++面试手撕代码----基本数据结构的简单实现1.String数据结构的简单实现:#include<iostream>#include<cstring>//forstrcpystrlenmethodsusingnamespacestd;classString{private: char*data; size_tlength;public: String():data(nullptr),length(0)......