Streams i użycie filter, distinct, limit oraz skip #13

Za nami wstęp do steramów w Java. Dzisiaj zaczniemy omawiać kolejne rodzaje streamów. Oprócz tego, że kod wygląda zwięźlej, używanie streamów ma wiele zalet optymalizacyjnych. Streamy w Java 8 mogą działać wielowątkowo i przyśpieszyć operacje na naszych kolekcjach w czasie swojej pracy. Chcąc używać starych dobrych pętli wielowątkowo, sami musimy się o to postarać 😉

Do ćwiczeń przygotowałem taką listę z książkami:

Sprawdźmy jak możemy na naszej kolekcji użyć metody filter:

Wynik:

Wszystko wygląda bardzo prosto. Filter przyjmuje do operacji interfejs funkcjonalny Predicate, który testuje element i zwraca true lub false. Następnie metoda filter buduje stream i „przekazuje” go do forEach, który zwraca wszystkie elementy wypisując je na konsolę.

I tutaj musimy się na chwilę zatrzymać, żeby wytłumaczyć coś co jeszcze nie zostało powiedziane. W tym kodzie mamy dwa przypadki. Metoda filter wykonuje operację pośrednią (ang. intermediate). Zapewnia nam stream z przefiltrowanymi elementami, na których nadal możemy pracować.

ForEach natomiast wykonuje operację ostateczną (ang. terminal). Nie tworzy nowego streama. Nasz łańcuch wywołań musi się w tym miejscu zakończyć. Ale dopóki będziemy używać metod, które wykonują operacje pośrednie, możemy wywoływać kolejne operacje na naszej liście:

Wynik:

Zobaczmy jak to przebiegało:

  1. Tworzymy stream na naszej liście
  2. Wywołujemy metodę filter, która filtruje element zgodnie z naszym warunkiem i zwraca stream
  3. Wywołujemy metodę distinct – usuwa takie same elementy na podstawie hashCode i equlas i zwraca stream
  4. Metoda limit skracana wynik do dwóch elementów, zwraca stream
  5. Metoda skip pomija elementy od początku listy, zwraca stream
  6. collection zwraca nam nową listę elementów i kończy nasz ciąg wywołań.

Trzeba też zauważyć, że nasza „stara” lista nie została zmieniona, zostały wykonane różne operacje z jej elementami, ale wyniki zostały zapisane do nowej listy.

I to tyle, poznaliśmy różne szczegóły steramów. Wiemy, że możemy je łączyć w ciągi wywołań i pracować na naszych kolekcjach danych.

Dodaj komentarz

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