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