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

How does Optional.map() exactly works?

根据 javadoc,Optional.map() returns 是可选的。

在以下代码段中:

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"));
  }

看起来,我想 return 一个字符串,但我得到一个可选的。尽管如此,没有编译错误。为什么?

你完全正确。 map() 方法 returns 是可选的,我赞赏您使用 javadoc。此处的不同之处在于,您随后会在 map() 返回的 Optional 上调用 orElseThrow() 方法 。如果您将 javadoc 称为 orElseThrow(),您将看到它 returns“[可选] 的现值”。在这种情况下,这是一个字符串。

整个操作链returns一个String:

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

您可以找到 Optional::map here.

的源代码