2016-08-02 11 views
23

Mam następujący kod w Javie wyszukiwania:„Optional.get()” bez 'isPresent() sprawdzić

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

ja chcąc odnaleźć kolumnę nazwy i powrócić pierwszy znaleziony.

Rozumiem, że istnieje przypadek, gdy nic nie znaleziono i powinno zostać przetworzone, ale w jaki sposób?

Czy to, co chce przez to przeklinanie:

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

?

Jak naprawić? Chcę zwrócić null, jeśli nic nie znaleziono.

UPDATE

Dobra, dobra, ja po prostu nie zdawali sobie sprawy, że findFirst() powraca Optional.

+0

Należy zauważyć, że nie należy używać '$' jako identyfikatora w języku Java: [JLS Sec 3.8] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html # jls-3.8): "Znak $ powinien być używany tylko w mechanicznie generowanym kodzie źródłowym lub, rzadko, w celu uzyskania dostępu do wcześniej istniejących nazw w starszych systemach." –

Odpowiedz

52

Wymień get() na orElse(null).

+0

Dlaczego? :) Dlaczego "orElse" zaczyna się od "lub"? – Dims

+6

Ponieważ to jest nazwa metody. A "else" jest słowem kluczowym. –

+0

@ Ułatwia to tylko krótką formę getOrElse, po prostu pomijając get. Opcjonalnie powinieneś używać 'lubElse' zamiast' get', ponieważ 'get' rzuci wyjątek, jeśli wartość jest pusta. – puhlen

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

Zwraca wartość, jeśli jest obecny, w przeciwnym razie zwraca null. Dokumentacja says, że przekazany parametr może być null (co jest zabronione dla orElseGet i).

Powiązane problemy