Optional.orElse(T other)
возвращает значение, если оно присутствует, в противном случае параметр возвращается как значение.
Таким образом, компилятор ожидает в качестве типа параметра переменную того же типа, что и обобщенный тип, используемый для Optional
.Здесь у вас есть Optional<Menu>
, поэтому ожидается Menu
.
Принимая во внимание ошибку компиляции здесь:
return menu.orElse(Optional.empty());
Обратите внимание, что главная цель Optional
- это действительно обернуть значение, есливыходит или обернуть пустой (вместо null
).
Таким образом, чтобы получить пустой необязательный элемент из потоковой обработки, такой как findFirst()
или findAny()
, вам не нужно ничего делать.
Так какдругие говорили, что этого достаточно:
return StreamSupport
.stream(cachedMenus.get(ALL_CURRENCIES_KEY).spliterator(), true)
.findFirst();