Tengo el siguiente código de búsqueda en Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Quería encontrar la columna por nombre y devolver la primera que se encuentre.
Entiendo que hay un caso en el que no se encuentra nada y debe procesarse, pero ¿cómo?
¿Es esto lo que quiere con este juramento?
'Optional.get()' without 'isPresent()' check
?
¿Como arreglar? Deseo volver null
si no encuentro nada.
ACTUALIZAR
Está bien, está bien, simplemente no me di cuenta, eso findFirst()
vuelve Optional
.
java
java-8
java-stream
optional
Atenúa
fuente
fuente
$
como identificador en Java: JLS Sec 3.8 : "El signo $ debe usarse solo en código fuente generado mecánicamente o, raramente, para acceder a nombres preexistentes en sistemas heredados".Respuestas:
Reemplazar
get()
conorElse(null)
.fuente
orElse
empieza con "o"?else
es una palabra clave.orElse
lugar deget
porqueget
lanzará una excepción si el valor es nulo.orElseGet()
toma aSupplier<T>
, mientras queorElse()
toma aT
. Estos no son equivalentes.orElse
; no hay ninguna referenciaorElseGet
en su comentario;)...findFirst().orElse(null);
Devuelve el valor si está presente; de lo contrario, devuelve
null
. La documentación dice que el parámetro pasado puede sernull
(lo que está prohibidoorElseGet
yorElseThrow
).fuente
mi solución fue comprobarlo de esta manera
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
fuente
Se creó Optional para que el código pudiera, después de todas estas décadas, finalmente comenzar a evitar null.
Elimine el .get (), devuelva el Opcional en sí y haga que el código de llamada se ocupe de él de manera adecuada (tal como debería hacerlo en el caso de que devuelva nulo).
fuente