gpt4 book ai didi

java - 以树形形式呈现数据

转载 作者:行者123 更新时间:2023-12-02 08:37:36 26 4
gpt4 key购买 nike

我从服务器获得了这样的信息,并且必须以树形结构向用户呈现该信息。来自服务器的数据采用以下形式:

APP          net        main 
Account net main
Address net main
APP net main
Person book optel
Person book ggggg
Person book show
Bindings apple parse
Bindings apple findProject
Bindings apple show

列的位置不固定。根据用户的喜好,第一列可以成为第二列或第三列。

在每一行中,第一个数据必须是第二个数据的父级,第二个数据必须是第三个数据的父级,如果出现第四个数据,那么它将是第三个数据的子级,并且它是第三个数据的子级。就这样。

当我循环访问来自服务器的信息时,我必须能够构建这种树状结构。

它从左侧(列)开始,这意味着左侧列将是第一个父级。我必须以树状形式呈现来自服务器的信息,如下所示:

APP
net
main

Account
net
main

...

Bindings
apple
show

etc...

可选要求:如果可能的话,我还必须能够使用该结构来创建表。我的一个 friend 建议使用链接列表,但我不知道他是否正确,如果他是正确的我该如何使用它。

最佳答案

第1步,将数据解析成表结构。

您需要一个简单的对象来表示树节点。这是一个起点:

// Implement a classic tree "Node" class
abstract class Node {
String label;
Map<String, Node> childNodes;

abstract Node getChild(String label);
abstract void addChild(Node child);
}

以下是我如何使用此结构将输入解析为树:

Node root = new Node("root");

Reader r = new InputStreamReader(new BufferedInputStream(...));

String line;

while ((line = r.readLine) != null) {
String[] colunms = line.split("\\s*");
// Read in the data in tabular form

// Build a tree structure of Node objects

// NOTE: This could be optimized quite a bit to take
// advantage of the sorted input.

Node curr = null;
Node prev = root;
for (int i = 0; i < columns.length; i++) {
curr = prev.getChild(columns[i]);

// If this node has not been seen yet, create it
if (curr == null) {
curr = new Node(columns[i]);
prev.addChild(curr);
}
prev = curr;
}
}

此后,您将拥有附加到根节点的所有数据。要显示表格,您可以反转此过程,进行深度优先遍历并将每个节点的完整路径打印为输出的一列。

对于一棵树,你已经有了结构。如果您将现有的 Model 类改编为您的 Node 对象(例如,Swing),那么您只需将树数据传递给 JTreeNode 就可以了。否则,以其他方式转换树很简单(例如呈现为静态 HTML 或呈现为 JSON 以在 Web 浏览器中呈现)。

关于java - 以树形形式呈现数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com