Java 8: Streamy 1
Ak by ste sa pýtali, aké sú najväčšie novinky v Jave 8, tak odpoveď bude jednoznačne, že Lambda výrazy (referencie na metódy) a Streamy. O tom prvom som už písal tu. O tom druhom si povieme teraz. Streamy sú nový spôsob ako pracovať s množinami údajov. A podobne ako Lambda výrazy, aj oni tak trochu posúvajú Javu do sveta funkcionálnych jazykov.
Streamy predstavujú nový prístup k spracovaniu údajov. Na prvý pohľad by sa mohlo zdať, že je to len ďalšia forma kolekcií, ale ich implementácia je zásadne iná a vďaka tomu majú niekoľko výrazne iných vlastností. Streamy sa dajú charakterizovať troma vlastnosťami:
Aby tej teórie nebolo príliš, poďme si ukázať jednoduchý príklad. Máme zoznam mien, z ktorého chceme získať dĺžky jednotlivých položiek a pre tie, čo majú viac ako 5 znakov, vypísať ich dĺžku:
Prvých päť riadkov je klasika. Len definujeme pole a napĺňame ho údajmi. Zaujímavé to začne byť až volaním names.stream(). To je moment, kedy sa zo sveta klasických kolekcií dostávame do sveta streamov. Výsledkom tohto volania je stream, ktorý následne necháme spracovať sériou operácií. Najprv reťazce prekonvertujeme na ich dĺžky a následne necháme cez filter prejsť len tie, ktoré majú viac ako 5 znakov. Na záver z položiek, ktoré ostali v streame, zostavíme nový zoznam. Ten potom vypíšeme do konzoly.
Toto je krátka ukážka toho, ako sa dá so streamami pracovať. Poďme ale pekne po poriadku. Ako vieme stream vytvoriť?
Stream máme vytvorený, čo sa s ním dá robiť? Operácie, ktoré stream podporuje, sa delia do dvoch kategórií:
V našom príklade boli metódy map a filter prechodné metódy a metóda collect konečná. Takto vyzerá zoznam prechodných funkcií:
A takto vyzerá zoznam konečných metód:
Variabilita práce so streamami je naozaj veľká. Stačí kombinovať rôzne prechodné funkcie a ukončiť správnou konečnou funkciou. Napr. konečná metóda reduce je celkom zaujímavá, pretože zredukuje pole do jednej hodnoty podľa nejakej operácie. Stačí jej teda dodať operáciu, ktoré z dvoch hodnôt robí jednu a ona vám zo streamu vyrobí nakoniec len jednu hodnotu (spolu s operáciou map tvoria známe duo z map-reduce algoritmu). Napr. podľa operácií Math.max alebo Math.min:
Toto všetko je len úvod do oblasti streamov. Nespomenul som, že existujú aj typové streamy: IntStreamDoubleStream a LongStream. Tieto nie len šetria energiu a čas tým, že nerobia boxing a unboxing nad prvkami, ale poskytujú tiež operácie relevantné daným typom. Nespomenul som tiež, že sa dá implementovať vlastný Collector (trieda, ktorú potrebuje collect metóda), alebo že sa prvky v streame dajú zoskupovať na základe definovanej operácie. A tiež som nespomenul, že medzi obyčajným streamom a paralélnym je len takýto malý rozdiel vo vytvorení:
Nevolám teda metódu stream ale parallelStream. Výsledok je, že operácie sa môžu v streame vykonávať paralelne. Ale to, či sa to nakoniec udeje, je závislé od toho, aké operácie sa so stream budú vykonávať.
Téma streamov je naozaj široká a pokojne by zaplnila niekoľko takýchto článkov. Účelom tohto bolo ukázať, že je to téma nanajvýš zaujímavá. Zásadné je uvedomiť si, že stream nie je nový druh kolekcie. Je objekt s úplne novou filozofiou, vnútornou implementáciou, a teda aj možnosťami. Je to každopádne nástroj, ktorý má určite svoje scenáre použitia, v ktorých je lepší ako čokoľvek iné.
Text je s dovolením autora prebratí z Blogu Petra Špirenga.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.

Dobrý článok? Chceš dostávať ďalšie?
Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.
Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.
robime.it existuje od roku 2012 s cieľom byť partnerom IT-čkárov a pomáhať im v odbornom raste.

Robíme to cez budovanie osobných vzťahov, HR službami a podpore IT komunít.

IT Blog – bloguj s nami
Vyhľadávanie pracovných príležitosti
Aktualizácia životopisu
Pohovor na skúšku
SÓLO pre freelancerov
Odporuč nám známeho
Digital footprint – Bloguj na robime.it
Pridať pracovnú ponuku
Prehľad pracovných ponúk

O nás
Kontakt
Ochrana súkromia
[email protected]

source