a.get("b")-6ren">
gpt4 book ai didi

Java 可选 : how to do with long map() chain

转载 作者:行者123 更新时间:2023-11-29 04:12:17 25 4
gpt4 key购买 nike

最近,我开始在我们的项目中处理 json 响应时使用 Optional:

Optional.ofNullable(root.get("a"))
.map(a -> a.get("b"))
.map(b -> b.get("c"))
.map(c -> c.get("d"))

对于每个 get(),我必须使用 map() 将返回值保存在“安全框”中,这使得代码非常冗长。要访问复杂的长 json 树中非常深的 json 字段,最终会得到一个相当长的 map() 链。

我梦到了这样的东西:

Optional.ofNullable(root.get("a")).map(a.get("b").get("c").get("d"))

如果这些 get() 方法中的任何一个返回空值,我将得到一个空的 Optional 作为表达式的结果。比方说,使用一个“安全箱”,所有可能的空值都可以以某种方式处理并变成空的 Optional。这是一个愚蠢的想法吗?

有没有办法让代码不那么冗长?

最佳答案

将其包装在一个方法中:

static Optional<JsonObject> get(JsonObject root, String... paths) {
Optional<JsonObject> opt = Optional.ofNullable(root);
for (String p : paths) {
if (!opt.isPresent()) break;
opt = opt.map(a -> a.get(p));
}
return opt;
}

然后这样调用:

Optional<JsonObject> jsonObject = get(root, "a", "b", "c", "d");

关于Java 可选 : how to do with long map() chain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54418931/

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