[英]Tree of java objects based on a list of strings representing hierarchy
我有一個有趣的事情,據我了解,這不是最簡單的任務。
我需要基於表示層次結構的字符串列表創建對象樹。
例如,列表中的字符串是(實際上可以是任何圖形):
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;
有很多可能的解決方案。 沒有復雜性,它看起來可能像:
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;
}
}
PS不太優雅,但簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.