Metoda Stream.collect() #18

      Brak komentarzy do Metoda Stream.collect() #18

W tym wpisie zajmiemy się metodą Stream.collect(). Metoda collect() może przyjąć jeden argument w postaci Collectora lub trzy argumenty w postaci Supplier, BiConsumer, BiConsumer. W tym wpisie jako wprowadzenie do metody collect() zajmiemy się podstawowymi metodami z klasy Collector.

Za pomocą Stream.collect() możemy tworzyć nowe struktury danych, przetwarzać je i wyciągać potrzebne nam informacje. Jeżeli ktokolwiek czytał moje wcześniejsze wpisy kursu Java 8 mógł zauważyć metodę:

Zadanie tej metody jest oczywiste, przekształca ona stream na którym operowaliśmy w listę elementów. Zacznijmy ćwiczenia i zobaczmy jak to działa. Na potrzebny stworzyłem sobie prostą tablicę książek:

Za pomocą metody Stream.of() będą ją przekształcał na stream.

Chciałbym teraz stworzyć sobie z tego jakieś „normalne” struktury 😉  jak List, Map, Set etc. Zobaczmy jak to działa.

  • Tworzenie List<Book> za pomocą metody Collectors.toList():

  • Tworzenie Map<String, Book> za pomocą metody Collectors.toMap(). Kluczem będzie tytuł książki, a wartością sama książka:

  • Tworzenie Set<Book> za pomocą metody Collectors.toSet():

  • Jeśli chcemy zbudować inną strukturę danych, niż dostępne metody toList(), toMap(), toSet(), możemy użyć metody toCollection(), w której za pomocą konstruktora określamy rodzaj struktury danych jaka nas interesuje.

Oczywiście klasa Collectors ma dużo więcej statycznych metod, które są niezwykle przydatne. Przyjrzymy się im bliżej 😉

  • Metoda joining() służy do łączenia Stringów.

Używając map wyciągamy z naszego Stream<Book> tytuły i łączymy je za pomocą
joining(„, „) oddzielając elementy przecinkiem.

  • Zliczyć elementy możemy za pomocą metody counting()

  • Ciekawą metodą jest metoda summarizingDoubleb dostępna również w wersji Integer czy Long. Zwraca obiekt typu DoubleSummaryStatistics lub inny odpowiedni dla typu Long czy Integer. Obiekt ten posiada w sobie szereg metod, które możemy wywołać i dowiedzieć się o statystykach naszego elementu, w tym przypadku ceny książki:

Metody liczenia średniej, sumy, max czy min również dostępne są samodzielnie w klasie Collectors.

  • Kolejną metodą jest groupingBy() zwracająca mapę. Metoda ta grupuje obiekty po wskazanym kluczu, w tym przypadku kluczem jest cena:

Oczywiście to nie wszystkie metody klasy Collectors. Zachęcam do samodzielnego testowania. Jak możemy zauważyć, często wystarczy krótka linia kodu, żeby wykonać dość skomplikowane operacje i stworzyć dość skomplikowane struktury danych.

Cały kod na github.

 

Dodaj komentarz

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