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.
的源代码
根据 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.