Metoda Stream.collect() #18

      2 komentarze 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.

 

2 thoughts on “Metoda Stream.collect() #18

  1. maxGzza

    Jestem budowlancem od 13 lat. postanowilem zostac programistom. widze ze sa kursy 2 tygodniowe stacjonarne za 1200zl. chce po nich zarabiac 15k. Czy musze oprucz tego cos zrobic?

    Reply

Dodaj komentarz

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