Stream i użycie map oraz flatMap #14

W tym odcinku przyjrzymy się dwóm metodom, które pracują na streamach. Jedną z nich jest metoda map oraz metoda flatMap. Proste i niezwykle przydatne. Głównym ich założeniem jest konwersja elementów kolekcji w inne kolekcje 🙂

Zaczniemy od map. Pracujemy na takiej kolekcji danych:

Na początek bardzo prosty przykład. Chcemy, pobrać wszystkie ceny z naszej kolekcji do listy. Na myśl od razu przychodzi nam kilka lini kodu z użyciem forEach albo tradycyjnej pętli. Ale można zrobić to prościej:

Za pomocą metody map możemy zmapować dane na taką strukturę, jaką potrzebujemy 🙂 Działanie funkcji map jest bardzo proste. Przyjmuje ona jako argument Function. Następnie wykonuje tą funkcję na każdym elemencie listy, ostatecznie obrobione obiekty zapisywane są do nowej listy. Należy pamiętać, że typ naszej nowej kolekcji zależy od tego jaki typ zwraca funkcja przesłana do map. W tym przypadku Book::getPrice zwraca double.

Oczywiście nic nie stoi na przeszkodzie, żeby łączyć wiele metod map. Najpierw pobieramy wszystkie ceny, a potem przetwarzamy je do formy tekstowej typu String.

Zajmijmy się teraz metodą flatMap. Jak sama nazwa wskazuje, służy ona do spłaszczania 🙂 Może się zdarzyć, że przetwarzając nasze obiekty, możemy otrzymać taką konstrukcję Steram<List<Book>>. I tak się właśnie stało, przygotowałem taką strukturę danych.

Wywołując metodę steram na takiej kolekcji, otrzymujemy Steram<List<Book>>. Naszym zadaniem, jest z tak zagnieżdżonej struktury, zebrać wszystko w jednej liście i pominąć obiekty powtarzające się. Sprawdźmy jak można to zrobić:

Oczywiście wszystko to można połączyć w całości i od razu pracować na liście, list naszych książek 😉

Wynik jest oczywisty. Z tej dziwnej struktury wydobyliśmy listę książek, które się nie powtarzają:

 

W tym odcinku to tyle. Poznaliśmy map i flatMap. Wiemy, że map służy do wyodrębnienia danych do własnych struktur. Natomiast flatMap możemy użyć dodatkowo do spłaszczenia zagnieżdżonych struktur.

Pamiętajcie, że przykłady są dostępne na githubie.

Dodaj komentarz

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