繁体   English   中英

Optional.map() 究竟是如何工作的?

[英]How does Optional.map() exactly works?

根据javadoc ,Optional.map() 返回一个 Optional。

在以下代码段中:

public String getName(Long tpUserId) {
    Optional<TpUser> selectedTpUser = tpUserRepo.findById(tpUserId);
    return selectedTpUser.map(user -> user.getFirstName() + " " + user.getSurName())
        .orElseThrow(() -> new IllegalArgumentException("No user found for this id"));
  }

看起来,我想返回一个字符串,但我得到了一个 Optional。 尽管如此,没有编译错误。 为什么?

你是完全正确的。 map()方法返回一个 Optional,我赞赏您使用 javadoc。 这里的区别在于,您然后map()返回的那个 Optional 上调用orElseThrow()方法。 如果您参考orElseThrow()javadoc ,您将看到它返回“[Optional] 的当前值”。 在这种情况下,这是一个字符串。

整个操作链返回一个String

  • 第一步( map(...) )将Optional<User>映射到Optional<String>
  • 第二步( orElseThrow(...) )解开Optional<String> ,从而返回一个String (或抛出IllegalArgumentException ,如果为空)。

您可以在此处找到Optional::map的源代码。

暂无
暂无

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

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