繁体   English   中英

Java可选:如何处理long map()链

[英]Java Optional: how to do with long map() chain

最近,我在项目中处理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()方法中的任何一个返回null值,我将得到一个空的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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM