Streamy Java 8 umožňujú vývojárom extrahovať presné údaje z veľkej zbierky pomocou sady preddefinovaných operácií.
Pred vydaním Java 8 by bolo použitie pojmu „stream“ v Jave automaticky spojené s I / O. Java 8 však predstavila prúd, ktorý možno označiť ako množinu výpočtových krokov, ktoré sú navzájom spojené, čo sa bežne označuje ako „prúdový tok“.
Tento článok vám predstaví prúdy Java 8 a demonštruje, ako môžu byť užitočné vo vašich projektoch.
Čo je to stream?
Stream je rozhranie Java, ktoré odoberá zdroj, vykonáva množinu operácií na extrahovanie konkrétnych údajov a potom tieto údaje poskytuje aplikácii na použitie. V zásade vám umožňuje extrahovať špecializované údaje zo zbierky zovšeobecnených údajov.
Ako fungujú streamy
Potrubie toku prúdu vždy začína zdrojom. Typ zdroja závisí od typu dát, s ktorými narábate, ale dvoma z najpopulárnejších sú polia a zbierky.
Ak chcete zbierku transformovať na počiatočný prúd, budete musieť pridať Prúd() funkciu k zdroju. Týmto sa zdroj umiestni do potrubia toku, kde sa nachádza niekoľko rôznych prechodných operácií (napr
filter () a sort ()) môže pracovať.Po vykonaní všetkých požadovaných prechodných operácií môžete zaviesť terminálovú operáciu (napríklad pre každý()), ktorý vyprodukuje predtým extrahované údaje zo zdroja.
Život bez prúdov
Java 8 bola vydaná v roku 2014, predtým však vývojári Java potrebovali extrahovať špecializované údaje zo zbierky všeobecných údajov.
Povedzme, že máte zoznam náhodných znakov, ktoré sú kombinované s náhodnými číslami a vytvárajú jedinečné hodnoty reťazca, ale chcete iba hodnoty, ktoré začínajú znakom „C“, a chcete usporiadať výsledok vzostupne objednať. Takto by ste extrahovali tieto údaje bez streamov.
Súvisiace: Čo potrebujete vedieť o používaní reťazcov v jazyku Java
Príklad filtrovania a triedenia hodnôt bez prúdov
import java.util. ArrayList;
import java.util. Polia;
import java.util. Zoznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje zoznam polí
Zoznam randomValues = Arrays.asList (
„E11“, „D12“, „A13“, „F14“, „C15“, „A16“,
„B11“, „B12“, „C13“, „B14“, „B15“, „B16“,
„F12“, „E13“, „C11“, „C14“, „A15“, „C16“,
„F11“, „C12“, „D13“, „E14“, „D15“, „D16“
);
// deklaruje, že zoznam polí uloží potrebné hodnoty
Zoznam requiredValues = new ArrayList <> ();
// extrahovanie požadovaných hodnôt a ich ukladanie do reqquiredValues
randomValues.forEach (hodnota -> {
if (value.startsWith ("C")) {
requiredValues.add (hodnota);
}
});
// zoradiť požadované hodnoty vzostupne
requiredValues.sort ((String value1, String value2) -> value1.compareTo (value2));
// vypíše každú hodnotu do konzoly
requiredValues.forEach ((hodnota reťazca) -> System.out.println (hodnota));
}
}
Tiež budete musieť deklarovať a inicializovať zoznam polí, či už používate streamy alebo iný spôsob extrakcie. Čo by ste nemuseli robiť, ak by ste používali streamy, je deklarovanie novej premennej na uchovanie požadovaných hodnôt ani vytvorenie ďalších piatich plus riadkov kódu v príklade vyššie.
Súvisiace: Ako vytvárať a vykonávať operácie na poliach v Jave
Vyššie uvedený kód produkuje v konzole nasledujúci výstup:
C11
C12
C13
C14
C15
C16
Život s prúdmi
Pri programovaní hovorí efektívnosť o dosiahnutí rovnakého výsledku s podstatne menším počtom kódov. To je presne to, čo programovací prúd robí pre programátora. Až sa nabudúce niekto opýta: „Prečo je vo vašom projekte dôležité používať prúdy?“ Zjednodušene: „prúdy podporujú efektívne programovanie.“
Pokračovaním v našom príklade vyššie, zavedením prúdov sa transformuje celý program.
Filtrovanie a triedenie hodnôt podľa príkladu toku údajov
import java.util. Polia;
import java.util. Zoznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje zoznam polí
Zoznam randomValues = Arrays.asList (
„E11“, „D12“, „A13“, „F14“, „C15“, „A16“,
„B11“, „B12“, „C13“, „B14“, „B15“, „B16“,
„F12“, „E13“, „C11“, „C14“, „A15“, „C16“,
„F11“, „C12“, „D13“, „E14“, „D15“, „D16“
);
// načíta iba hodnoty začínajúce na C, zoradí ich a vytlačí do konzoly.
randomValues.stream (). filter (value-> value.startsWith ("C")). triedené (). forEach (System.out:: println);
}
}
Vyššie uvedený kód ukazuje, aké výkonné je rozhranie streamu. Zoberie zoznam náhodných hodnôt poľa a transformuje ho na prúd pomocou Prúd() funkcia. Stream sa potom zredukuje na zoznam polí, ktorý obsahuje požadované hodnoty (čo sú všetky hodnoty začínajúce sa) C.) pomocou filter () funkcia.
Ako vidíte v príklade vyššie, C. hodnoty sú náhodne usporiadané v zozname polí. Ak by ste mali tlačiť prúd v tomto okamihu v potrubí, hodnota C15 bude vytlačený ako prvý. Preto sort () do potrubia toku údajov je zavedená funkcia na nové usporiadanie nového poľa vo vzostupnom poradí.
Konečná funkcia v potrubí toku je a pre každý() funkcia. Toto je terminálová funkcia, ktorá sa používa na zastavenie toku prúdov a v konzole vytvára nasledujúce výsledky:
C11
C12
C13
C14
C15
C16
Existuje rozsiahly zoznam prechodných operácií, ktoré je možné použiť v toku prúdov.
Potrubie toku prúdu vždy začína jedným zdrojom a Prúd() a vždy končí jednou operáciou terminálu (aj keď existuje niekoľko rôznych) Ale medzi týmito dvoma časťami je zoznam šiestich medziprocesov, ktoré môžete použitie.
V našom príklade vyššie sa používajú iba dve z týchto prechodných operáciífilter () a sort (). Stredná operácia, ktorú si vyberiete, bude závisieť od úloh, ktoré chcete vykonať.
Ak by ktorákoľvek z hodnôt, ktoré začínajú na našom zozname polí „C“, bola malými písmenami a vykonali sme s nimi rovnaké prechodné operácie, dostali by sme nasledujúci výsledok.
Príklad vykonania operácií filtrovania a triedenia na malých hodnotách
import java.util. Polia;
import java.util. Zoznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje zoznam polí
Zoznam randomValues = Arrays.asList (
„E11“, „D12“, „A13“, „F14“, „C15“, „A16“,
„B11“, „B12“, „c13“, „B14“, „B15“, „B16“,
„F12“, „E13“, „C11“, „C14“, „A15“, „c16“,
„F11“, „C12“, „D13“, „E14“, „D15“, „D16“
);
// načíta iba hodnoty začínajúce na C, zoradí ich a vytlačí do konzoly.
randomValues.stream (). filter (value-> value.startsWith ("C")). triedené (). forEach (System.out:: println);
}
}
Vyššie uvedený kód vytvorí v konzole nasledujúce hodnoty:
C11
C12
C14
C15
Jediný problém s výstupom vyššie je, že nepresne vyjadruje všetko C. hodnoty v našom zozname polí. Dobrým spôsobom, ako opraviť túto malú chybu, je zavedenie ďalšej prechodnej operácie do potrubia toku; táto operácia je známa ako mapa () funkcia.
Príklad použitia mapovej funkcie
import java.util. Polia;
import java.util. Zoznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje zoznam polí
Zoznam randomValues = Arrays.asList (
„E11“, „D12“, „A13“, „F14“, „C15“, „A16“,
„B11“, „B12“, „c13“, „B14“, „B15“, „B16“,
„F12“, „E13“, „C11“, „C14“, „A15“, „c16“,
„F11“, „C12“, „D13“, „E14“, „D15“, „D16“
);
// transformuje všetky malé písmená na veľké písmená,
// načíta iba hodnoty začínajúce na C, zoradí ich a vytlačí do konzoly.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). ordered (). forEach (System.out:: println);
}
}
The mapa () funkcia transformuje objekt z jedného stavu do druhého; v našom príklade vyššie transformuje všetky malé znaky v zozname polí na veľké písmená.
Umiestňovanie mapa () funkcie tesne pred filter () funkcia načíta všetky hodnoty, ktoré začínajú C. zo zoznamu polí.
Vyššie uvedený kód produkuje v konzole nasledujúci výsledok, ktorý úspešne predstavuje všetky C. hodnoty v zozname polí.
C11
C12
C13
C14
C15
C16
Medzi ďalšie tri prechodné operácie, ktoré môžete použiť vo svojich aplikáciách, patria:
- nahliadnuť ()
- limit ()
- preskočiť ()
Streamy Java 8 uľahčujú tvorbu efektívneho kódu
S prúdmi Java 8 môžete pomocou jedného riadku kódu extrahovať mimoriadne konkrétne a relevantné údaje z veľkého zdroja. Pokiaľ zahrniete aj začiatočné Prúd() funkcie a operátora terminálu, môžete použiť ľubovoľnú kombináciu sprostredkujúcich operácií, ktoré poskytujú zodpovedajúce výstupy pre váš cieľ.
Ak vás zaujíma riadok kódu uvedený v našom filter () funkcia; je známy ako „výraz lambda“. Výrazy lambda sú ďalšou funkciou zavedenou v prostredí Java 8 a obsahujú veľa podrobností, ktoré by sa vám mohli hodiť.
Ak ste programátor v prostredí Java a máte záujem dozvedieť sa viac o lambdách Java 8, v tomto článku sa bližšie pozrieme na syntax a použitie lambda.
Prečítajte si Ďalej
- Programovanie
- Java
- Výukové programy pre kódovanie
Kadeisha Kean je softwarová vývojárka a autorka technických / technologických noviniek. Má výraznú schopnosť zjednodušovať niektoré z najkomplexnejších technologických konceptov; výroba materiálu, ktorý ľahko pochopí každý technologický nováčik. Venuje sa písaniu, vývoju zaujímavého softvéru a cestovaniu po svete (prostredníctvom dokumentárnych filmov).
Prihlásiť sa ku odberu noviniek
Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!
Ešte jeden krok…!
V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.