Stream::findAny
возвращает Optional
и его метод Optional::findAny
, согласно документации, есть 4 способа возврата T
:
Optional::get
возвращает T
или броски NoSuchElementException
Optional::orElse
возвращает T
или значение по умолчанию
Optional::orElseGet
возвращает T
или значение, указанное в Supplier
Optional::orElseThrow
возвращает T
или создает пользовательское исключение
Насколько я понимаю, вы ищете второй или третий метод, который возвращает определенное значение в случае, если источником является null
. Вы можете вернуть нулевой объект, используя шаблон Null-Object , который представляет объект, который является действительным, но ничего не делает. Или вы можете использовать null
.
Я предлагаю вам получить страну за до , вы разрешите вернуть null
или что-либо еще и использовать метод getCoCountry()
(я полагаю, Country::getCoCountry
возвращает либо int
или Integer
) - в противном случае то, что вы сделали, вернет NullPointerException
.
Попробуйте следующий фрагмент:
Integer idCountry = listContries.stream() // Stream
.filter(c -> countryFinal.equals(c.getNoCountry())) // Get one equals to "Spain"
.findFirst() // Get Optional<Country>
.map(Country::getCoCountry) // If exists, get its code
.orElse(0); // Or else return an invalid code
Обратите внимание, что нет необходимости фильтровать по названию страны, а затем проверять равенство, так как вы ожидаете, что есть только один "Spain"
.