Как заставить `Map :: get` вернуть либо` Optional` найденного значения, либо `Optional.empty ()` - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь сделать это:

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

Действительно, я хочу вернуть Optional.of(foundVal), если найден, в противном случае Optional.empty(). Я не верю, что Optional.of(null) соответствует этому. Какой синтаксис выполняет то, что я хочу сделать?

То есть, как я могу получить карту get для возврата правильного Optional?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Это

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

или действительно

Optional.of(null);

не удалось бы с NullPointerException. Как говорится javadoc

Выдает:
NullPointerException - если value равно нулю

Optional#ofNullable существует, когда вы не знаете, передано ли ему значение null или нет:

Параметры
value - возможно нулевое значение для описания

А поскольку Map#get(Object) уже возвращает null, когда для данного ключа нет записи

Возвращает
значение, которому соответствует указанный ключ, или null, если эта карта не содержит сопоставления для ключа

вам не нужно использовать getOrDefault со значением null по умолчанию. Вместо этого вы можете напрямую использовать

Optional.ofNullable(myMap.get(myKey));
0 голосов
/ 01 ноября 2018

Почему бы просто:

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

JavaDocs

...