首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java使用平面文件中的父id创建多个树状结构

Java使用平面文件中的父ID创建多个树状结构的解决方案可以通过以下步骤实现:

  1. 读取平面文件:使用Java的文件读取功能,逐行读取平面文件中的数据。平面文件可以是文本文件、CSV文件或其他格式的文件。
  2. 解析数据:对于每一行数据,解析出父ID和当前节点的ID。可以使用Java的字符串分割或正则表达式等方法来提取所需的数据。
  3. 构建节点对象:根据解析出的父ID和当前节点的ID,创建节点对象。节点对象可以是自定义的Java类,包含父ID、节点ID和其他相关属性。
  4. 构建树状结构:根据节点对象的父ID和节点ID,将节点对象组织成树状结构。可以使用Java的集合类如Map、List等来存储和组织节点对象。
  5. 遍历树状结构:通过递归或循环遍历树状结构,可以实现对树的深度优先或广度优先遍历。在遍历过程中,可以对每个节点进行相应的操作,如输出节点信息或进行其他业务逻辑处理。

以下是一个示例代码,演示如何使用Java实现上述步骤:

代码语言:txt
复制
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

public class TreeBuilder {
    public static void main(String[] args) {
        // 读取平面文件
        List<String> lines = readFile("data.txt");

        // 解析数据并构建节点对象
        Map<String, Node> nodes = parseData(lines);

        // 构建树状结构
        List<Node> roots = buildTree(nodes);

        // 遍历树状结构
        for (Node root : roots) {
            traverseTree(root, 0);
        }
    }

    // 读取平面文件
    private static List<String> readFile(String filePath) {
        List<String> lines = new ArrayList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines;
    }

    // 解析数据并构建节点对象
    private static Map<String, Node> parseData(List<String> lines) {
        Map<String, Node> nodes = new HashMap<>();
        for (String line : lines) {
            String[] parts = line.split(",");
            String parentId = parts[0];
            String nodeId = parts[1];
            Node node = new Node(nodeId);
            nodes.put(nodeId, node);
            if (parentId.equals("0")) {
                // 根节点
                nodes.put(nodeId, node);
            } else {
                // 非根节点
                Node parent = nodes.get(parentId);
                parent.addChild(node);
            }
        }
        return nodes;
    }

    // 构建树状结构
    private static List<Node> buildTree(Map<String, Node> nodes) {
        List<Node> roots = new ArrayList<>();
        for (Node node : nodes.values()) {
            if (node.getParent() == null) {
                roots.add(node);
            }
        }
        return roots;
    }

    // 遍历树状结构
    private static void traverseTree(Node node, int depth) {
        StringBuilder indent = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            indent.append("  ");
        }
        System.out.println(indent.toString() + node.getId());
        for (Node child : node.getChildren()) {
            traverseTree(child, depth + 1);
        }
    }

    // 节点类
    private static class Node {
        private String id;
        private Node parent;
        private List<Node> children;

        public Node(String id) {
            this.id = id;
            this.children = new ArrayList<>();
        }

        public String getId() {
            return id;
        }

        public Node getParent() {
            return parent;
        }

        public void setParent(Node parent) {
            this.parent = parent;
        }

        public List<Node> getChildren() {
            return children;
        }

        public void addChild(Node child) {
            child.setParent(this);
            children.add(child);
        }
    }
}

以上代码示例中,假设平面文件的格式为每行两个逗号分隔的值,第一个值为父ID,第二个值为节点ID。代码中使用了一个Node类来表示节点,其中包含了父ID、节点ID和子节点列表。通过解析平面文件的数据,构建节点对象,并根据父ID和节点ID组织成树状结构。最后通过遍历树状结构,输出节点信息。

请注意,以上代码仅为示例,实际应用中可能需要根据具体需求进行适当的修改和扩展。另外,根据问题描述的要求,不提及具体的云计算品牌商,因此没有包含相关产品和链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

查找目录下所有java文件查找Java文件中的Toast在对应行中找出对应的id使用id在String中查找对应的toast提示信息。

几乎是边查文档编写,记录写编写过程: 查找目录下所有java文件 查找Java文件中含有Toast相关的行 在对应行中找出对应的id 使用id在String中查找对应的toast提示信息。...查找目录下所有java文件 这个我是直接copy网上递归遍历的,省略。...查找Java文件中的Toast 需要找出Toast的特征,项目中有两个Toast类 BannerTips和ToastUtils 两个类。 1.先代码过滤对应的行。...找到BannerTips、ToastUtils调用的地方 2.找出提示的地方 3.观察其实项目中的id的前面均含有R.string. 可以以此作为区分。...在对应行中找出对应的id 使用id在String中查找对应的toast提示信息。 最后去重。 最后一个比较简单,可以自己写,也可以解析下xml写。

3.9K40

【Html.js——数据整理】平地起高楼(蓝桥杯真题-2328)【合集】

请不要修改环境自动生成的 convert-to-tree.js 以及 index.html 文件的文件路径以及文件名。 检测时使用的输入数据与题目中给出的示例数据可能是不同的。... 部分: 创建一个 div 元素,id 为 output-container,用于显示最终的树状结构数据。...创建一个空的 module 对象,用于模拟 Node.js 中的模块导出机制。 引入 convert-to-tree.js 文件,该文件包含将平铺数据转换为树状结构的函数。...如果父节点不存在且当前节点的父节点 id 等于 rootId,将当前节点添加到 tree 数组中。 返回结果: 返回最终的树状结构数组 tree。...遍历树状结构的数据,为每个节点创建一个 li 元素,并将节点名称作为文本节点添加到 li 元素中。 递归调用 getRegionDoms 函数处理当前节点的子节点,并将结果添加到当前 li 元素中。

6100
  • zookeeper 的数据模型

    1. zookeeper的数据模型 zookeeper的数据节点可以视为树状结构(或者目录),树中的各节点被称为 znode(即zookeeper node),一个znode可以有多个子节点。...zookeeper节点在结构上表现为树状;使用路径path来定位某个znode,比如/ns-1/xdr630/mysql/schema1/table1,此处ns-1、xdr630、mysql、schema1...znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时 间戳等数据结构,又像目录一样可以作为路径标识的一部分。 ? 那么如何描述一个znode呢?...一个znode大体上分为3各部分: 节点的数据:即znode data(节点path, 节点data)的关系就像是java map中(key,value)的关系 节点的子节点children 节点的状态...ID ctime:数据节点创建时的时间 mZxid:数据节点最后一次更新时的事务 ID mtime:数据节点最后一次更新时的时间 pZxid:数据节点的子节点最后一次被修改时的事务 ID cversion

    65810

    Web前端学习 第2章 网页重构8 网页结构

    在生活中,家谱就是一个最常见的树状结构,一个人可以有多个儿子,但是儿子只能有一个父亲,随着整个家庭一代代繁衍,整个家谱树也越来越根深叶茂。我们先看一个家谱的例子。...我们还是以家谱为例,家谱中的每一个人我们都可以称他为树状结构的节点。...(这里需要注意的是,司马炎和司马熙不是同级,因为他们没有相同的父级。) 二、html文件的树状结构 html文件的结构和上面的家谱一样,也是树状结构,例如下面的html代码。 1 的关系,我们再给html节点分类,可以分成下面三类: 元素节点 文本节点 属性节点 在上面的代码中,每一个元素都是原始节点,第一个li中的“香蕉”两个字就是文本节点,id就是属性节点。...为了让树状结构更简洁,在上面的树状结构中未添加属性节点。 四、课后练习: 画出融职教育首页的网页树状结构,下图为参考答案。

    51610

    【融职培训】Web前端学习 第2章 网页重构8 网页结构

    在生活中,家谱就是一个最常见的树状结构,一个人可以有多个儿子,但是儿子只能有一个父亲,随着整个家庭一代代繁衍,整个家谱树也越来越根深叶茂。我们先看一个家谱的例子。...我们还是以家谱为例,家谱中的每一个人我们都可以称他为树状结构的节点。...(这里需要注意的是,司马炎和司马熙不是同级,因为他们没有相同的父级。) 二、html文件的树状结构 html文件的结构和上面的家谱一样,也是树状结构,例如下面的html代码。 1 的关系,我们再给html节点分类,可以分成下面三类: 元素节点 文本节点 属性节点 在上面的代码中,每一个元素都是原始节点,第一个li中的“香蕉”两个字就是文本节点,id就是属性节点。...为了让树状结构更简洁,在上面的树状结构中未添加属性节点。 四、课后练习: 画出融职教育首页的网页树状结构,下图为参考答案。

    36810

    File 类目录详解

    操作目录 mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() 创建目录,如果父目录链不存在,则一同创建 list() 文件|目录 名字符串形式 listFiles()...parent/p/test"; File src =new File(path); //src.mkdir(); src.mkdirs(); } } 以树状结构展现文件结构...编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件(夹),利用 File 类和递归知识,实现树状结构的展示,代码如下: public class TestFile { /**...* 递归: * 概念:在 java 代码中出现,出现本身调用自己的现象,我们称之为递归。...:首先去判断 file 是文件还是目录,如果是文件则直接打印文件名,如果是目录就把目录下的所有文件遍历一遍。

    45130

    Zookeeper系统模型结构分析

    Zookeeper的系统模型结构可以从以下几个方面进行分析:数据结构:Zookeeper本身是一个树形目录服务(名称空间),其数据模型类似于文件系统,以树状结构进行组织。...在这个树状结构中,每一个数据节点都被称为一个ZNode,这些ZNode可以存储数据、属性和ACL(Access Control Lists,访问控制列表)权限信息。...事务ID(ZXID):在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,包括数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等。...权限控制 ACL在ZooKeeper的实际使用中,我们的做法往往是搭建一个共用的ZooKeeper集群,统一为若干个应用提供服务。...ACL 权限控制权限模式(Schema)授权对象(ID)权限(Permission)参数:ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限每个znode支持设置多种权限控制方案和多个权限子节点不会继承父节点的权限

    29520

    如何创建修改远程仓库 + 如何删除远程仓库 + 如何删除远程仓库中的某个文件或文件夹 + 如何使用git将本地仓库连接到多个远程仓库

    六、删除Github中已有的仓库中的某个文件或文件夹(即删除远程仓库中的某个文件或文件夹) 我们知道,在Github上我们只能删除仓库,并不能删除文件或者文件夹,所以只能用命令来解决。...6.1、本地仓库和远程仓库同时删除文件或文件夹 1、我们先在本地仓库中删除掉文件a.txt ? 2、然后执行以下命令,即可删除远程仓库中的文件了 ? 删除远程仓库中的文件夹同理。不在演示。...七、如何使用git将本地仓库连接到多个远程仓库 1、先在GiuHub(国外)、Gitee码云(国内) 和 Coding(国内) 上分别新建一个远程仓库,参考“二、创建远程仓库”。...2、创建一个本地仓库test,在某一个目录下右键 --> Git Bash Here,演示使用本地仓库test(远程仓库的名称和本地仓库的名称可以不一样,一样是为了方便,不一样也没事) ?...其余命令如下: 使用git在本地创建一个本地仓库的过程(位置:在本地桌面上)     $ makdir test       // 创建一个本地仓库     $ cd test           /

    7.5K21

    单点登录(一)| LDAP 协议

    目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。...每个条目有自己的唯一可以区别的名称(DN); 3、对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必需属性也会被继承下来; 4、属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成...=dong.liu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一) Rdn Relative dn 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid...=tom”,或‘cn=exmaple’ 信息模型:在ldap信息以树状方式组织,在树状信息中的基本数据单元是条目,而每个条目由属性构成,属性中存储有属性值; 命令模型:在ldap中的条目定位方式,在ldap...扩展操作:有修改密码和startTLS扩展; 安全模型:ldap中的安全模型主要通过身份认证、安全通道和访问控制来实现; 信息组织 目录条目以层次型的树状结构来组织。反应地域和组织机构界限。 ?

    6.8K20

    深入探讨 Java 类加载器

    Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用的开发人员不需要直接同类加载器进行交互。...下面介绍类加载器的树状组织结构。 类加载器的树状组织结构 Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。...因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。...树的根节点就是引导类加载器。图 1中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。 图 1. 类加载器树状组织结构示意图 ? 代码清单 1演示了类加载器的树状组织结构。...如果一个类库被多个模块共用,可以为这个类库单独的创建一个模块,把其它模块需要用到的 Java 包声明为导出的。其它模块声明导入这些类。

    77140

    深入探讨 Java 类加载器

    下面介绍类加载器的树状组织结构。 类加载器的树状组织结构 Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。...因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。...树的根节点就是引导类加载器。图 1中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。 图 1. 类加载器树状组织结构示意图 ? 代码清单 1演示了类加载器的树状组织结构。...*,那么对于包 com.example.core中的类,都是由父类加载器来完成的。 OSGi 模块的这种类加载器结构,使得一个类的不同版本可以共存在 Java 虚拟机中,带来了很大的灵活性。...如果一个类库被多个模块共用,可以为这个类库单独的创建一个模块,把其它模块需要用到的 Java 包声明为导出的。其它模块声明导入这些类。

    60320

    java递归生成树形菜单_java递归无限层级树

    完整示例代码地址如下: https://github.com/Dr-Water/springboot-action/tree/master/springboot-shiro 一、 权限树的问题由来 在开发中难免遇到一个有多级菜单结构树...3", "pid": "0", "menuChildren": [] } ] 二、 解决方案 目前的解决方案主要有以下两种方案: 方案一:后端把所有需要的数据以一个大list返回前端,前端进行操作,把数据搞成树状结构...方案二: 后端在后端返回数据之前把数据搞成已经有层次结构的数据,方案二也分为两种解决方法 方法一:次性将数据查询出来,在java程序中进行树状结构的构建 方法二: 第一次将最高层次的数据查询出来,然后多次循环查询数据库将子数据查询出来...由于博主的前端水平有限,目前只能用后端的实现方式,再加上每次查询数据库的开销比较大,所以本文使用方案二的方法一进行验证 实现步骤 以菜单的结构树为例 准备mysql数据库的基础数据 java的实体类...递归 处理权限管理菜单树或分类 一次性搞定权限树遍历——–权限树后台遍历的通用解决方案 (java后台)用户权限的多级菜单遍历方法 java 用递归实现球上下级(牵涉到对上级的去重) java递归获取某个父节点下面的所有子节点

    3.2K30

    华为OD机试 删除指定目录

    本期题目:删除指定目录 题目 某文件系统中有 N 个目录,每个目录都一个独一无二的 ID。 每个目录只有一个付目录,但每个目录下可以有零个或多个子目录,目录结构呈树状结构。...假设 根目录的 ID 为0,且根目录没有父目录 ID 用唯一的正整数表示,并统一编号 现给定目录 ID 和其付目录 ID 的对应父子关系表 [子目录ID,父目录ID],以及一个待删除的目录 ID, 请计算并返回一个...ID 序列, 表示因为删除指定目录后剩下的所有目录, 返回的 ID 序列以递增序输出 注意: 1、被删除的目录或文件编号一定在输入的 ID 序列中; 2、当一个目录删除时,它所有的子目录都会被删除。...输入 输入的第一行为父子关系表的长度m;接下来的m行为m个父子关系对; 最后一行为待删除的 ID。 序列中的元素以空格分割, 参见样例。...,通常包括多个部分,如英语测试、数学测试、逻辑思维测试等。

    46310

    如何高效的从数组数据生成树状层级数组?

    任何无限极分类都会涉及到创建一个树状层级数组。从顶级分类递归查找子分类,最终构建一个树状数组。如果分类数据是一个数组配置文件,且子类父类id没有明确的大小关系。...那么我们如何高效的从一个二维数组中构建我们所需要的树状结构呢。 假设数据源如下: ? 方案1 : ? 每次递归都要遍历所有的数据源。时间复杂度N^2 方案2 : ?...分析: 每次递归循环内部只遍历指定父分类下的数据。加上前期数据准备,整个时间复杂度Nx2 测试 生成测试数据 ?...对两种方式使用相同的5000个数据,分别测试100次,两种方式100次执行总时间如下(单位s): float(96.147500038147) float(0.82804679870605) 可以看出相差的不是一点点...方案2还是使用的是递归调用。递归调用虽然会让程序简介,阅读方便,但是数据多的时候容易出现超出最大调用栈的情况,同时内存也会持续上升。 还有什么其他的方案呢?

    2.6K10

    【Linux入门】进程管理

    查看进程命令 ps程序一般是指存储在硬盘中的可执行文件,进程则是指运行该程序后在内存中的个体,为了能管理这个在内存中的个体,系统就赋予了一个 PID 。...R进程正在运行,S睡眠状态(可被唤醒),D睡眠状态(不可被唤醒),T停止状态,Z僵尸状态UID进程的用户ID。PID进程ID。PPID父进程ID,指向了创建该进程的原始进程。...toptop 命令用于显示当前系统中运行中的进程的实时信息,包括进程的 CPU 使用率、内存使用情况、运行时间、PID(进程 ID)等。...显示进程树状结构命令 pstreepstree 命令用于显示当前系统中所有进程的树状结构。它以树状的形式展示了一个系统中的所有进程,每个进程用箭号连接起来,形成一个树状结构。...这个树状结构可以帮助你更好地理解系统中的进程关系,以及哪些进程是父子进程关系。使用 pstree 命令时,可以使用-p选项来显示特定进程的进程树,例如pstree -p 。

    27921

    DOM操作

    它给文档(结构树)提供了一个结构化的表述并且定义了一种方式—程序可以对结构树进行访问,以改变文档的结构,样式和内容。...浏览器会根据DOM模型,将结构化文档(比如HTML和XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口。...1.4节点树 一个文档的所有节点,按照所在的层级,可以抽象成一种树状结构。这种树状结构就是DOM。 最顶层的节点就是document节点,它代表了整个文档。...ES5的方法: document.querySelector():返回匹配指定的CSS选择器的元素节点。如果有多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回null。...如下为一个创建元素、设置元素属性、添加元素、删除元素的例子: id="ct"> 一个段落 <a href

    1.9K60

    用golang递归构建无限级树状目录json数据和数据库

    (path, filename) // 构造文件结构 fio, _ := os.Lstat(fpath) // 将当前文件作为子节点添加到目录下 child := FileNode{...if fio.IsDir() { walk(fpath, fio, &child) } 实现无限级struct嵌套,转成json,供treeview使用,即无限级树状菜单。...你需要3个字段来表达这个树: id,本节点的primary key parent_id,其值为父节点的primary key key,忘了学名叫啥了,你可以称为线索 level,表示当前节点到根节点的距离...其中,key字段的值为:从跟节点到父节点的primary key,中间用任意非数字符号分割。...例如以下树状结构 ├── a │   ├── d │   │   ├── p │   │   ├── q │   │   └── r │   ├── e │   └── f ├── b │   ├──

    3.7K20

    前端要树形数据 我三分钟接口扔给他

    前言 树状结构是我们在日常工作中经常需要返回的数据结构 一个小小的数状结构也能看出一个开发者的思维方式 我个人最开始写这种树状结构真的是代码老长了 别人一看就会知道我是一个菜鸟 慢慢的自己思考怎么去用最少的代码去搭建一个树状结构...= name; } } 思路一 我们的树状图一般都是一个动态的结构也就是说我们不能把代码写的太死板 无论树的深度怎么增加我们都不需要更改代码 一般来说 树状结构都有一个核心字段pid 第一个节点...去Map里面取Key对应的节点Set到自己的子节点下面 去除数据中第一层Pid !...思路二 因为树状数据比较常用 我们每次都写一个方法肯定比较笨 我们可以利用泛型区写一个工具类 我先把代码写出来然后再解释 这个是可以直接使用的 是比较通用的 import cn.hutool.core.collection.CollUtil...* @param idFn 获取id的方法 * @param pidFn 获取父id的方法 * @param getRootCondition

    50010
    领券