簡體   English   中英

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

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM