Steram i użycie findFirst(), findAny() oraz Optional #16

W ostatniej części kursu przyglądaliśmy się metodom anyMatch, allMatch oraz noneMatch. Za ich pomocą mogliśmy stwierdzić czy jakieś obiekt istnieje w naszej kolekcji. Zwracały one jednak tylko wartość boolean. Dzisiaj przedstawiam wam metody findFirst() oraz findAny(), które zwracają tajemniczy obiekt Optional<T> 😉

Jak zwykle pracujemy na takiej liście obiektów:

Użycie findFirst lub findAny na naszej kolekcji jest bardzo proste:

Oczywiście musimy użyć stream, potem metodę filter, gdzie definiujemy nasz warunek wyszukania i na koniec zlecamy takiej konstrukcji znalezienie pierwszego elementu. Równie dobrze, możemy użyć tutaj findAny() i znajdzie nam element pasujący do naszego warunku, który niekoniecznie będzie pierwszym elementem w naszej kolekcji.

Wiele osób pewnie zadaje pytanie, jaka jest różnica między findFirst() i findAny(). Wyobrażamy sobie, że i tak lista jest przeszukiwana po kolei. Najczęściej findAny() odnajdzie pierwszy element z listy, ale nie jest to gwarancją. Jeżeli jednak będziemy chcieli użyć streama wielowątkowego parallelStream()  na naszej kolekcji i nie zależy nam na znalezieniu pierwszego elementu użyjmy findAny() co zagwarantuje nam najszybsze wyszukanie elementu.

Wynikiem naszego przeszukanie jest taki oto obiekt:

Jak widzimy Book jest opakowany w Optional. Który dostarcza różne metody wyciągnięcia naszego obiektu lub wykonania dodatkowej akcji:

Jeżeli użyjemy isPresent, optional zwróci true, jeżeli zawiera obiekt, w innym wypadku false:

 

Jeżeli użyjemy ifPresent, gdy obiekt istnieje, będziemy mogli wykonać na nim dodatkową akcję:

 

Jeżeli użyjemy metody get, otrzymamy nasz obiekt:

 

Użycie metody orElse zwraca znaleziony obiekt, lub możemy utworzyć nowy:

 

Możemy też użyć orElseThrow, jeżeli nasz obiekt nie będzie znaleziony, rzucimy wyjątek:

 

Optional i jego możliwości to także zupełnie inny temat, który jeszcze będzie poruszony. Przedstawiłem wam findFirst(), findAny() i najważniejsze metody Optiona<T>.
Jak zwykle, cały kod znajdziecie na githubie.

One thought on “Steram i użycie findFirst(), findAny() oraz Optional #16

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *