Eu tenho o seguinte código de pesquisa em Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Desejava encontrar a coluna por nome e retornar a primeira encontrada.
Eu entendo que há um caso em que nada foi encontrado e deve ser processado, mas como?
É isso que quer com este juramento:
'Optional.get()' without 'isPresent()' check
?
Como consertar? Desejo voltar null
se nada for encontrado.
ATUALIZAR
Ok, ok, eu simplesmente não percebi, isso findFirst()
retorna Optional
.
java
java-8
java-stream
optional
Escurece
fonte
fonte
$
como um identificador em Java: JLS Sec 3.8 : "O sinal $ deve ser usado apenas em código-fonte gerado mecanicamente ou, raramente, para acessar nomes pré-existentes em sistemas legados."Respostas:
Substitua
get()
pororElse(null)
.fonte
orElse
começa com "ou"?else
é uma palavra-chave.orElse
vez deget
porqueget
lançará uma exceção se o valor for nulo.orElseGet()
leva aSupplier<T>
, enquanto queorElse()
leva aT
. Eles não são equivalentes.orElse
; não há referênciaorElseGet
em seu comentário;)...findFirst().orElse(null);
Retorna o valor se presente; caso contrário, retorna
null
. A documentação diz que o parâmetro passado pode sernull
(o que é proibidoorElseGet
eorElseThrow
).fonte
minha solução foi verificar desta forma
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
fonte
O Optional foi criado para que o código pudesse, após todas essas décadas, finalmente começar a evitar o null.
Remova o .get (), retorne o próprio Optional e faça com que o código de chamada trate-o de maneira apropriada (da mesma forma que faria no caso de você estar retornando null).
fonte