我如何通过名称而不是值获得TreeView分支



是否有办法通过名称获得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");

既然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的任意后代,你必须做一个树搜索。

最新更新