Optional.map()如何工作?

时间:2020-09-17 15:21:45

标签: java optional

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

看起来,我想返回一个String,但得到一个Optional。但是,没有编译错误。为什么?

2 个答案:

答案 0 :(得分:3)

您完全正确。 map()方法返回Optional,我为您使用javadoc表示赞赏。此处的区别在于,您然后在orElseThrow()返回的那个Optional 上调用map()方法。如果在orElseThrow()中引用javadoc,则会看到它返回“ [Optional]的当前值”。在这种情况下,这是一个字符串。

答案 1 :(得分:1)

整个操作链返回一个String

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

您可以找到Optional::map here的源代码。