首页
学习
活动
专区
工具
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

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

62910

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

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

48210

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

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

35610

File 类目录详解

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

43130

Zookeeper系统模型结构分析

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

19220

单点登录(一)| 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.1K20

深入探讨 Java 类加载器

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

74440

深入探讨 Java 类加载器

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

56220

如何创建修改远程仓库 + 如何删除远程仓库 + 如何删除远程仓库某个文件文件夹 + 如何使用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.2K20

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.1K30

华为OD机试 删除指定目录

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

35510

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

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

2.5K10

【Linux入门】进程管理

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

21621

PHP实现操作数组类库定义与用法示例

(); foreach ($arr as $row) { $key = $row[$keyField]; $ret[$key][] = $row; } return $ret; } /** * 将一个平面的二维数组按照指定字段转换为树状结构...* * * 如果要获得任意节点为根子树,可以使用 $refs 参数: * @code php * $refs = null; * $tree = ArrayHelper::tree($rows, '...* * @param array $arr 数据源 * @param string $keyNodeId 节点ID字段名 * @param string $keyParentId 节点ID字段名 *...@param string $keyChildrens 保存子节点字段名 * @param boolean $refs 是否在返回结果包含节点引用 * * return array 树形结构数组...sortByMultiCols($array, array($keyname = $dir)); } /** * 将一个二维数组按照多个列进行排序,类似 SQL 语句中 ORDER BY * * 用法

74540

DOM操作

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

1.8K60

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

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

44110

用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.5K20
领券