2016-08-02 31 views
23

Ich habe folgenden Suchcode in Java:'Optional.get()' ohne 'isPresent()' überprüft

return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get(); 

I Spalte nach dem Namen zu finden wünschte und zurück erster gefunden.

Ich verstehe, es gibt einen Fall, wenn nichts gefunden und es sollte verarbeitet werden, aber wie?

Ist das, was sie von diesem Schwur will:

'Optional.get()' without 'isPresent()' check 

?

Wie zu beheben? Ich möchte null zurückgeben, wenn nichts gefunden wird.

UPDATE

Okay, okay, ich wusste einfach nicht, dass findFirst() kehrt Optional.

+0

Beachten Sie, dass Sie '$' nicht als Bezeichner in Java verwenden sollten: [JLS Sec 3.8] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html # jls-3.8): "Das $ -Zeichen sollte nur in mechanisch generiertem Quellcode verwendet werden oder selten für den Zugriff auf bereits vorhandene Namen auf Altsystemen." –

Antwort

52

Ersetzen Sie get() durch orElse(null).

+0

Warum? :) Warum 'orElse' beginnt mit" oder "? – Dims

+6

Weil das der Methodenname ist. Und "else" ist ein Schlüsselwort. –

+0

@Dims es ist nur eine kurze Form von getOrElse, nur den Griff auslassen. Mit optional sollten Sie normalerweise 'orElse' anstelle von' get' verwenden, da 'get' eine Ausnahme auslöst, wenn der Wert null ist. – puhlen

7
...findFirst().orElse(null); 

Gibt den Wert, falls vorhanden, sonst null zurückgibt. In der Dokumentation says kann der übergebene Parameter null sein (was für orElseGet und orElseThrow verboten ist).