Stream API, zavedené v Java 8, sa používa na spracovanie kolekcií objektov. Prúd v jazyku Java je sekvencia objektov, ktoré podporujú rôzne metódy, ktoré možno zreťaziť na dosiahnutie požadovaného výsledku.
Použitie streamu v jazyku Java
Nižšie sú uvedené spôsoby použitia streamu v jazyku Java:
- Stream API je spôsob vyjadrenia a spracovania kolekcií objektov.
- Umožnite nám vykonávať operácie ako filtrovanie, mapovanie, zmenšovanie a triedenie.
Ako vytvoriť Java Stream?
Vytvorenie Java Streamu je jedným z najzákladnejších krokov pred zvážením funkcií Java Streamu. Nižšie je uvedená syntax, ako deklarovať Java Stream.
Syntax
Stream stream;>
Tu je T buď trieda, objekt alebo typ údajov v závislosti od deklarácie.
Funkcie Java Stream
Funkcie streamu Java sú uvedené nižšie:
- Prúd nie je dátová štruktúra, ale berie vstup z kolekcií, polí alebo I/O kanálov.
- Prúdy nemenia pôvodnú dátovú štruktúru, poskytujú iba výsledok podľa zreťazených metód.
- Každá medzioperačná operácia je vykonávaná lenivo a ako výsledok vracia prúd, takže je možné zreťaziť rôzne medzioperačné operácie. Terminálové operácie označujú koniec toku a vrátia výsledok.
Rôzne operácie na streamoch
V streamoch existujú dva typy operácií:
- Medziľahlé operácie
- Ukončiť operácie
Medziľahlé operácie
Medziľahlé operácie sú typy operácií, v ktorých sú viaceré metódy zreťazené za sebou.
Charakteristika medzioperačných operácií
- Metódy sú spojené.
- Medziľahlé operácie transformujú prúd na iný prúd.
- Umožňuje koncepciu filtrovania, kde jedna metóda filtruje dáta a po spracovaní ich odovzdáva inej metóde.
Výhoda Java Stream
Existuje niekoľko výhod, kvôli ktorým používame Stream v jazyku Java, ako je uvedené nižšie:
- Žiadne úložisko
- Pipeline of Functions
- Lenivosť
- Môže byť nekonečný
- Dá sa paralelizovať
- Môže byť vytvorený z kolekcií, polí, riadkov súborov, metód v streame, IntStream atď.
Dôležité prechodné operácie
Nižšie je uvedených niekoľko prechodných operácií:
1. mapa()
Metóda map slúži na vrátenie prúdu pozostávajúceho z výsledkov aplikácie danej funkcie na prvky tohto prúdu.
List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());>
2. filter()
Metóda filtrovania sa používa na výber prvkov podľa predikátu odovzdaného ako argument.
rozdelenie reťazcov c++
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().filter(s->s.startsWith('S')).collect(Collectors.toList());>
3. zoradené()
Metóda sorted sa používa na triedenie prúdu.
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().sorted().collect(Collectors.toList());>
Terminálové operácie
Terminálové operácie sú typom operácií, ktoré vracajú výsledok. Tieto operácie sa ďalej nespracúvajú, len vrátia konečnú výslednú hodnotu.
Dôležité terminálové operácie
Nižšie je uvedených niekoľko terminálových operácií:
1. zbierať ()
Metóda zberu sa používa na vrátenie výsledku medzioperácií vykonaných na toku.
List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());>
2. forEach()
Metóda forEach sa používa na iteráciu cez každý prvok prúdu.
List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));>
3. znížiť()
Metóda redukcie sa používa na redukciu prvkov toku na jednu hodnotu. Metóda redukcie berie ako parameter BinaryOperator.
List number = Arrays.asList(2,3,4,5); int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);>
Tu sa premennej ans priradí 0 ako počiatočná hodnota a pripočíta sa k nej i.
Poznámka: Intermediate Operations sú spustené na základe konceptu Lazy Evaluation, ktorý zaisťuje, že každá metóda vráti pevnú hodnotu (terminálna operácia) pred prechodom na ďalšiu metódu.
Príklad Java Stream
Java
arraylist v java sort
// Java program to demonstrate> // the use of stream in java> import> java.util.*;> import> java.util.stream.*;> class> Demo {> > public> static> void> main(String args[])> > {> > // create a list of integers> > List number = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> );> > // demonstration of map method> > List square> > = number.stream()> > .map(x ->x * x)> > .collect(Collectors.toList());> > // create a list of String> > List names = Arrays.asList(> > 'Reflection'> ,> 'Collection'> ,> 'Stream'> );> > // demonstration of filter method> > List result> > = names.stream()> > .filter(s ->s.startsWith(> 'S'> ))> > .collect(Collectors.toList());> > > System.out.println(result);> > // demonstration of sorted method> > List show> > = names.stream()> > .sorted()> > .collect(Collectors.toList());> > > System.out.println(show);> > // create a list of integers> > List numbers> > = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> ,> 2> );> > // collect method returns a set> > Set squareSet> > = numbers.stream()> > .map(x ->x * x)> > .collect(Collectors.toSet());> > > System.out.println(squareSet);> > // demonstration of forEach method> > number.stream()> > .map(x ->x * x)> > .forEach(y ->System.out.println(y));> > // demonstration of reduce method> > int> even> > = number.stream()> > .filter(x ->x %> 2> ==> 0> )> > .reduce(> 0> , (ans, i) ->ans + i);> > System.out.println(even);> > }> }> |
>
>
Výkon
[4, 9, 16, 25] [Stream] [Collection, Reflection, Stream] [16, 4, 9, 25] 4 9 16 25 6>
Dôležité body/pozorovania Java Stream
- Prúd pozostáva zo zdroja, za ktorým nasleduje nula alebo viacero medziľahlých metód, ktoré sú navzájom kombinované (reťazové) a terminálna metóda na spracovanie objektov získaných zo zdroja podľa opísaných metód.
- Prúd sa používa na výpočet prvkov podľa zreťazených metód bez zmeny pôvodnej hodnoty objektu.