gpt4 book ai didi

java - 使用 Optional 查找层次结构的根

转载 作者:行者123 更新时间:2023-11-30 08:32:14 24 4
gpt4 key购买 nike

我有一个类型的树状层次结构,这些类型知道他们的 child ,但不知道他们的 parent 。现在我正在创建一个外部注册表,它从外部提供相反的路径:

public interface Registry<X>{
Optional<X> parent(X node);
}

现在我想在该接口(interface)中实现一个方法,它从任何给定节点获取此层次结构的根注释(根节点可以是传入的节点或任何祖先节点)。

我做到了这一点:

default X root(X node) {

X current = node;

for (Optional<X> opt = Optional.of(current);
opt.isPresent();
opt = opt.flatMap(this::parent)) {

if (opt.isPresent()) {
current = opt.get();
}
}

return current;

}

虽然这可行,但感觉有点笨拙。 Optional.isPresent()被调用了两次,变量current被重新赋值。有什么办法可以让它更优雅、更实用吗?

最佳答案

我在想

default X root(X node) {
X root = node;

for (Optional<X> parentOpt = parent(root); parentOpt.isPresent(); root = parentOpt.get())
;

return root;
}

我不喜欢处理null 参数。所以我们遵从 parent 的实现,您可能会将其记录为在 null 参数上返回一个空的 Optional

如果参数是null,我们也将返回null

如果参数不为null,我们将其值保存在root 中并开始循环。我们得到它的潜在 parent 。如果存在,我们更新 root,然后重试。否则,我们会中断,并返回 root 中最后保存的值,因为那是我们所能得到的。

我认为,那种笨拙的感觉来自node 的初始Optional。我认为您不需要那个。

关于java - 使用 Optional 查找层次结构的根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40229432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com