W tym artykule spojrzysz na wygodny sposób obsługi zbioru danych polegający na przefiltrowaniu kolekcji na podstawie dowolnego kryterium ustalonego przez Ciebie! Przedstawiam elastyczne działanie podejścia funkcyjnego jakie zapewnia metoda "filter" w języku Java, a Ty tylko czytaj uważnie i ze zrozumieniem 😉!
"FILTER" W JĘZYKU JAVA WYGODNYM FILTROWANIEM ELEMENTÓW KOLEKCJI
"filter" jest metodą zwracającą kolekcję po przefiltrowaniu jej elementów według wskazanych przez Ciebie zasad. Jest to bardzo wygodne i bardzo uniwersalne narzędzie, które w połączeniu z generycznością i podejściem funkcyjnym, doskonale potrafi skurczyć kod zachowując tylko same konkrety 💯.
To jest przykład funkcji wyższego rzędu, czyli metody wykorzystującej wyrażenie lambda w miejsce parametru formalnego ℹ️. To właśnie w środku niego, definiujemy konkretne kryterium, na podstawie którego ma dojść do przefiltrowania kolekcji i wykluczenia pewnych elementów.
Przykład kodu źródłowego
Rozpatrzmy na rozgrzewkę taki przykład. Mamy kolekcję typu "ArrayList" z liczbami całkowitymi:
var numbers = new ArrayList<>(Arrays.asList(40, 68, 192, -14, 102, 875, 56, 93, -565, 34));i chcemy się dowiedzieć które z tych liczb są podzielne przez 5 5️⃣. Naturalnie może pójść w ruch pętla "for" lub rozszerzona ("for-each"), lecz zobacz jaką drogą jeszcze możemy pójść korzystając z "filter" w języku Java:
var numbersDivisibleByFive = numbers.stream().filter(number -> number % 5 == 0);Rozpracowuję linijkę krok po kroku.
Pierwsza rzecz to słowo "var" - ono pozwala uniknąć pisania ręcznie typu zmiennej i zachęcam Cię do stosowania tego słówka (szczegóły o nim są w osobnym artykule).
Zanim możemy skorzystać z metody "filter", musimy wpierw przekonwertować kolekcję na strumień używając wywołania "stream", bo metody tego typu operują na strumieniach, a nie na kolekcjach. To jest to wywołanie:
stream()Potem jest przejście do "filter" ✅. I teraz robi się najciekawiej. Wewnątrz nawiasów mamy parametr w postaci wyrażenia lambda reprezentującego jeden parametr w postaci aktualnie rozpatrywanego elementu (zapraszam do załączonego artykułu po więcej info na ten temat ℹ️). To:
number % 5 == 0jest określane jako predykat – wyrażenie osadzone w wyrażeniu lambda zwracające wartość logiczną (na to też będzie osobny artykuł). W tym miejscu wstawiamy nasze kryterium.
To może być każda rzecz jaką sobie zażyczysz 😄. Podzielność przez N, parzystość/nieparzystość liczb, czy to jest liczba pierwsza i wiele innych przykładów 😎. Jak mi ktoś nie wierzy, że to wystarczy 🙂, to niech po tamtej instrukcji dopisze sobie to:
numbersDivisibleByFive.forEach(System.out::println);Na wyjściu wyskoczą tylko liczby podzielne przez 5. A wszystko za sprawą jednego "potoku" wywołań metod. Czy to nie cudowne podejście 🤩?
![]() |
Metoda "filter" pozwala w sposób funkcyjny przefiltrować kolekcję danych (w oparciu o strumień) na podstawie kryterium podanego w wyrażeniu lambda jako predykat.
Szybka prezentacja metody "filter" w języku Java i artykuł dobiegł końca 🏁. W tym momencie jest szansa, że możesz chętniej zerkać na programowanie funkcyjne 😀.
NASTĘPNY ARTYKUŁ: Consumer w języku Java. Procedura jako parametr metody
