Я пытаюсь это сделать:
return Optional.of(myMap.getOrDefault(myKey, null));
На самом деле, я хочу вернуть Optional.of(foundVal), если он найден, иначе Optional.empty(). Я не верю, что Optional.of(null) приравнивается к этому. Какой синтаксис делает то, что я хочу делать?
То есть, как я могу получить карту get, чтобы вернуть правильный Optional?
но подумайте об этом нуле немного, null может означать, что значение отсутствует или ключ на самом деле сопоставлен с нулем, в зависимости от вашей карты и приложения
@ Евгений - Спасибо. Да, я сам создаю карту из потока, поэтому, если значение не существует, запись также никогда не существовала бы. Тем не менее, я пытаюсь охватить все нулевые случаи.




Этот
Optional.of(myMap.getOrDefault(myKey, null));
или действительно
Optional.of(null);
не удалось бы с NullPointerException. Как говорится в javadoc
Throws:
NullPointerException - ifvalueis null
Optional#ofNullable существует, когда вы не знаете, является ли значение, которое вы ему передаете, null или нет:
Parameters:
value- the possibly-null value to describe
И поскольку Map#get(Object) уже возвращает null, когда нет записи для данного ключа
Returns:
the value to which the specified key is mapped, ornullif this map contains no mapping for the key
вам не нужно использовать getOrDefault со значением null по умолчанию. Вместо этого вы можете напрямую использовать
Optional.ofNullable(myMap.get(myKey));
Функциональное и однозначно слишком долгое решение:
myMap.entrySet().stream()
.filter(it -> it.getKey().equals(myKey))
.findFirst()
.map(Map.Entry::getValue);
очень плохая идея, так как это не использует индекс карты и не выполняет полное сканирование карты
Optional#ofNullable, или еще лучше, вы можете выполнить некоторые действия, если ключ отсутствует, напримерMap#computeIfAbsent