如何通过名称而不是值来获取TreeView分支?

时间:2015-08-10 16:05:55

标签: java javafx treeview branch

有没有办法按名称获得TreeView分支? 例如,如果我有TreeView这样的菜单:

TreeItem<String> root, branch;

root = new TreeItem<>();
root.setExpanded(true);

branch = makeBranch("Chicken", root);

makeBranch("Hen", branch);

以下是makeBranch()方法:

public TreeItem<String> makeBranch(String s, TreeItem<String> parent){

    TreeItem<String> item = new TreeItem<>(s);
    item.setExpanded(true);

    parent.getChildren().add(item);
    return item;
}

现在,如果我想获得一个分支,我可以这样做:

branch.getChildren().get(a_number); // get using index

但是,无论如何我可以通过它的名字而不是价值获得分支? 如下所示:

branch.getChildren().get("the name of leaf or branch");

1 个答案:

答案 0 :(得分:1)

由于TreeItem.getChildren()会返回ObservableList<TreeItem<T>>,您可以使用List的方法找到您要查找的孩子,例如使用Stream过滤内容:

final String value = "the name of leaf or branch";
Optional<TreeItem<String>> nodeOptional = branch.getChildren().stream()
                                                .filter(
                                                    (child)-> child.getValue().equals(value)
                                                 )
                                                .findFirst();

if (nodeOptional.isPresent()) {
    TreeItem<String> item = nodeOptional.get();
    // do something with item
} else {
    // no child with specified value was found
}

请注意,您只能通过这种方式搜索branch直接子项。如果您想找到branch的任意后代,则必须执行tree search