簡體   English   中英

如何讓`Map::get` 返回找到值的`Optional` 或`Optional.empty()`

[英]How to make `Map::get` return either an `Optional` of the found value or `Optional.empty()`

我正在嘗試這樣做:

return Optional.of(myMap.getOrDefault(myKey, null));

真的,我想要的是如果找到則返回Optional.of(foundVal) ,否則返回Optional.empty() 我不相信Optional.of(null)等同於那個。 我想要做什么語法?

也就是說,我怎樣才能讓 map get返回一個正確的Optional

為什么不簡單:

return Optional.ofNullable(myMap.get(myKey));

Java文檔

這個

Optional.of(myMap.getOrDefault(myKey, null));

或者真的

Optional.of(null);

會因NullPointerException失敗。 正如javadoc所述

拋出:
NullPointerException - 如果value null

Optional#ofNullable當您不知道傳遞給它的值是否為null存在:

參數
value - 要描述的可能為空的值

並且由於Map#get(Object)在沒有給定鍵的條目時已經返回null

回報
指定鍵映射到的值,如果此映射不包含該鍵的映射,則為null

您不需要使用帶有null值的getOrDefault作為默認值。 你可以直接使用

Optional.ofNullable(myMap.get(myKey));

功能性且絕對太長的解決方案:

myMap.entrySet().stream()
  .filter(it -> it.getKey().equals(myKey))
  .findFirst()
  .map(Map.Entry::getValue);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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