У меня есть следующий код поиска на Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Я хотел найти столбец по имени и вернуть первый найденный.
Я так понимаю, бывает, что ничего не найдено и его нужно обрабатывать, но как?
Это то, чего он хочет от этой ругани:
'Optional.get()' without 'isPresent()' check
?
Как исправить? Я хочу вернуться, null
если ничего не найдено.
ОБНОВИТЬ
Ладно, ладно, я просто не осознавал, что это findFirst()
возвращается Optional
.
java
java-8
java-stream
optional
Тускнеет
источник
источник
$
в качестве идентификатора в Java: JLS Sec 3.8 : «Знак $ следует использовать только в механически сгенерированном исходном коде или, в редких случаях, для доступа к уже существующим именам в устаревших системах».Ответы:
Заменить
get()
наorElse(null)
.источник
orElse
начинается с «или»?else
это ключевое слово.orElse
вместо,get
потому чтоget
вызовет исключение, если значение равно нулю.orElseGet()
берет aSupplier<T>
, тогда какorElse()
беретT
. Они не эквивалентны.orElse
;orElseGet
в его комментарии нет упоминания ;)...findFirst().orElse(null);
Возвращает значение, если оно присутствует, в противном случае возвращает
null
. В документации написано, что переданный параметр может бытьnull
(что запрещеноorElseGet
иorElseThrow
).источник
мое решение было проверить это таким образом
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
источник
Необязательный был создан, чтобы код мог по прошествии всех этих десятилетий, наконец, начать избегать null.
Удалите .get (), верните сам Optional и заставьте вызывающий код обрабатывать его соответствующим образом (так же, как это должно было бы быть в случае, если бы вы возвращали null).
источник