Stream i prymitywne typy danych #17

      Brak komentarzy do Stream i prymitywne typy danych #17

Do tej pory definiowaliśmy Stream na obiektach, zgodnie z jego deklaracją Steram<T> literkę „T” musimy zastąpić jakimś obiektem. A co jeśli chcemy pracować na typach prymitywnych jak int, double, long. Okazuje się, że Java 8 przygotowała dla nas odpowiednią paczkę metod.

Zamiast pracować na pętlach i kombinować coś z ifami możemy od dzisiaj użyć IntStream, DoubleStream czy LongStream. Każda z tych klas posiada mnóstwo funkcji także takich, które poznaliśmy już używając Steram<T>.

IntStream.of. Jeżeli potrzebujemy stream z konkretnymi liczbami możemy go zdefiniować za pomocą mtody of:

Metoda of przyjmuje wartości, z których tworzy stream. Możemy na nim od razu wywołać np metodę sorted(). Tak jak pisałem wyżej, prymitywne streamy mają mnóstwo metod, za pomocą których można operować na naszych wartościach.

IntStream.range. Za pomocą metody range możemy zdefiniować stream z zakresem wartości. W tym przypadku będą do liczby od 1 do 99;

Jeżeli użyjemy mtody rangeClosed zdefiniujemy liczby od 1 do 100:

IntStream.Generate. Przy pomocy tej metody możemy wygenerować określoną ilość wartości. W tym przypadku jest to 10 liczb losowych o typie int z zakresu 0-500. Na końcu wybieramy maksymalną wartość z naszych 10 wylosowanych liczb.

IntStream.iterate. Za pomocą metody iterate możemy wygenerować stream zwiększając kolejne liczny o określoną wartość. W tym przypadku startujemy od liczby 0, i kolejną liczbę zwiększamy zawsze o 4. Ograniczamy się do 5 liczb za pomocą metody limit.

I na koniec najważniejsze. Możemy każdy Stream<T> zdegradować na stream, który będzie operował na prostych typach. Metoda boxed() pozwala nam przekształcić proste typy w stream operujący na obiektach.

mapToInt – ta metoda pozwala nam na mapowania elementów na IntStream. Dzięki temu możemy na przykład przekształcić listę Integer na IntStream.

boxed() – Oczywiście można to też robić w drugą stronę i przekształcić zwykłe int w Integer. W tym przypadku definiuję sobie 99 liczb za pomocą range i przekształcam to do tablicy za pomocą toArray(). Gdy już mam zwykła tablicę int[] po przekształceniu w stream używam metody boxed() i w ten sposób powstaje Stream<Integer>.

Oczywiście to nie wszystkie metody jakie można znaleźć w IntStream, DoubleStream czy LongStream. Zapoznaliśmy się z przykładami, a resztę musicie odkryć sami 😛

Przykłady są dostępne na github

Dodaj komentarz

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