[英]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.