我在列表中有一个字符串路径集合,例如[“ x1 / x2 / x3”,“ x1 / x2 / x4”,“ x1 /
x5”]。我需要从该列表构造一个树状结构,可以对其进行迭代以获得漂亮的打印树。像这样
x1
/ \
x5 x2
/ \
x3 x4
有什么想法/建议吗?我认为可以通过处理字符串列表来首先解决该问题。编辑:选择的正确答案是一种优雅的实现,其他建议也很好。
遵循可访问树的幼稚实现的实现:
class Tree<T> implements Visitable<T> {
// NB: LinkedHashSet preserves insertion order
private final Set<Tree> children = new LinkedHashSet<Tree>();
private final T data;
Tree(T data) {
this.data = data;
}
void accept(Visitor<T> visitor) {
visitor.visitData(this, data);
for (Tree child : children) {
Visitor<T> childVisitor = visitor.visitTree(child);
child.accept(childVisitor);
}
}
Tree child(T data) {
for (Tree child: children ) {
if (child.data.equals(data)) {
return child;
}
}
return child(new Tree(data));
}
Tree child(Tree<T> child) {
children.add(child);
return child;
}
}
访客模式的界面:
interface Visitor<T> {
Visitor<T> visitTree(Tree<T> tree);
void visitData(Tree<T> parent, T data);
}
interface Visitable<T> {
void accept(Visitor<T> visitor);
}
访客模式的示例实现:
class PrintIndentedVisitor implements Visitor<String> {
private final int indent;
PrintIndentedVisitor(int indent) {
this.indent = indent;
}
Visitor<String> visitTree(Tree<String> tree) {
return new IndentVisitor(indent + 2);
}
void visitData(Tree<String> parent, String data) {
for (int i = 0; i < indent; i++) { // TODO: naive implementation
System.out.print(" ");
}
System.out.println(data);
}
}
最后(!!!)一个简单的测试用例:
Tree<String> forest = new Tree<String>("forest");
Tree<String> current = forest;
for (String tree : Arrays.asList("x1/x2/x3", "x1/x2/x4", "x1/x5")) {
Tree<String> root = current;
for (String data : tree.split("/")) {
current = current.child(data);
}
current = root;
}
forest.accept(new PrintIndentedVisitor(0));
输出:
森林
x1
2倍
3倍
4倍
5倍
我有一个带有< code>parent字段的“page”对象列表。该父字段引用了列表中的另一个对象。我想从基于此字段的列表中创建一个树层次结构。 以下是我的原始列表: 我想把它转换成这样的树形结构: 我希望有一个可重用的函数,我可以随时对任意列表调用它。有谁知道处理这个问题的好方法吗?任何帮助或建议将不胜感激!
问题内容: 我有一个带有字段的“页面”对象列表。此父字段引用列表中的另一个对象。我想基于此字段从此列表创建树层次结构。 这是我原始列表的样子: 我想将其转换为这样的树结构: 我希望可以在任何时候针对任意列表调用的可重用函数。有人知道解决这个问题的好方法吗?任何帮助或建议,将不胜感激! 问题答案: 小提琴
问题内容: 我有一个字符串,其内容是XML。我想将标签分开,并使其成为Java中的字符串列表。以下是我正在尝试的东西: 我想将其分为以下列表: 我试图通过JAXB处理器执行此操作,但效果不佳。还使用split尝试了一些愚蠢的逻辑,但这也无济于事。还有其他方法可以做到这一点吗? 问题答案:
以前在这里可能会问过类似的问题,但我运气不好,我想知道如何从json字符串下面提取特定对象,如,然后构造。但是,有一个转折,下面的属性之一是一个随机数,可以是任何东西!!! 你知道我该如何做到这一点吗?请最好使用Jackson JSON解析器/或者GSON?
问题内容: 我想知道是否有人可以指出我的资源,其中记录了序列化php字符串的详细信息。我基本上想知道格式/结构,因此我可以在VB.NET中编写一个函数以对其进行序列化/反序列化。 谢谢! 问题答案: 基本结构如下: 标量类型: 布尔值序列化为: 其中是一个整数值,其值为(false)或(true)。 整数序列化为: 其中是整数值。 浮点数被序列化为(含义为double): 浮点值在哪里。 字符串被
我想知道是否有人能给我指出一个资源,其中记录了序列化php字符串的详细信息。我基本上想知道格式/结构,这样我就可以在VB.NET中编写一个函数来序列化/反序列化它。 谢了!