簡體   English   中英

基於表示層次結構的字符串列表的Java對象樹

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM