我有一个有趣的,据我所知,这不是最简单的任务。
我需要根据表示层次结构的字符串列表创建一个对象树。
例如,列表中的字符串是(实际上它可以是任何图形):
List<String> hierarchies;
1# 1#2# 1#2#3# 1#2#4# 1#2#4#5#
我上课:
class Tree {
List<Tree> children;
// here is getter
}
我有一些实施但只是为了开始。我不知道如何完成此代码。你能与我分享你的愿景吗?
提前致谢!
Tree tree = null;
for (String hierarchy : hierarchies) {
if (hierarchy.equals("1#")) {
tree = new Tree();
} else {
tree.getChildren().add(new Tree());
}
}
return tree;
答案 0 :(得分:0)
有很多可能的解决方案。没有复杂性,它可能看起来像:
public void testHierarchy() {
List<String> hierarchies = new ArrayList<String>();
hierarchies.add("1#");
hierarchies.add("1#2#");
hierarchies.add("1#2#3#");
hierarchies.add("1#2#4#");
hierarchies.add("1#2#4#5#");
Tree root = new Tree();
for (String hierarchy : hierarchies) {
String[] elHierarchy = hierarchy.split("#");
processLevel(elHierarchy, root);
}
}
private void processLevel(String[] hierarchy, Tree rootTree) {
if (null == rootTree.getValue() || "".equals(rootTree.getValue())) {
rootTree.setValue(hierarchy[0]);
}
Tree nextChild = null;
for (Tree child : rootTree.getChildren()) {
if (child.getValue().equals(hierarchy[1])) {
nextChild = child;
break;
}
}
if (hierarchy.length > 1) {
if (null == nextChild) {
nextChild = new Tree();
nextChild.setValue(hierarchy[1]);
rootTree.getChildren().add(nextChild);
}
String[] remainHierarchy = new String[hierarchy.length - 1];
System.arraycopy(hierarchy, 1, remainHierarchy, 0, remainHierarchy.length);
processLevel(remainHierarchy, nextChild);
}
}
private static class Tree {
String value;
List<Tree> children = new ArrayList<SometestTest.Tree>();
public List<Tree> getChildren() {
return children;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
P.S。不是太优雅而是简单。