Ich habe den folgenden Suchcode in Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Ich wollte die Spalte nach Namen finden und die erste gefundene zurückgeben.
Ich verstehe, dass es einen Fall gibt, in dem nichts gefunden wurde und verarbeitet werden sollte, aber wie?
Ist es das, was es von diesem Fluchen will:
'Optional.get()' without 'isPresent()' check
?
Wie repariert man? Ich möchte zurückkehren, null
wenn nichts gefunden wird.
AKTUALISIEREN
Okay, okay, ich wusste nur nicht, dass das findFirst()
zurückkehrt Optional
.
java
java-8
java-stream
optional
Dims
quelle
quelle
$
in Java nicht als Bezeichner verwenden sollten: JLS Sec 3.8 : "Das $ -Zeichen sollte nur in mechanisch generiertem Quellcode oder selten für den Zugriff auf bereits vorhandene Namen auf Legacy-Systemen verwendet werden."Antworten:
Ersetzen
get()
durchorElse(null)
.quelle
orElse
mit "oder" beginnen?else
ist ein Schlüsselwort.orElse
anstelle von verwenden,get
da daget
eine Ausnahme ausgelöst wird, wenn der Wert null ist.orElseGet()
nimmt aSupplier<T>
, währendorElse()
nimmt aT
. Diese sind nicht gleichwertig.orElse
; es gibt keinen Hinweis auforElseGet
in seinem Kommentar;)...findFirst().orElse(null);
Gibt den Wert zurück, falls vorhanden, andernfalls
null
. Die Dokumentation besagt, dass der übergebene Parameter sein kannnull
(was fürorElseGet
und verboten istorElseThrow
).quelle
Meine Lösung bestand darin, dies auf diese Weise zu überprüfen
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
quelle
Optional wurde erstellt, damit Code nach all diesen Jahrzehnten endlich anfangen kann , Null zu vermeiden .
Entfernen Sie das .get (), geben Sie das Optionale selbst zurück und lassen Sie den aufrufenden Code entsprechend damit umgehen (genau wie es für den Fall tun müsste, dass Sie null zurückgeben würden).
quelle