logo

Stream v Jave

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:



  1. Stream API je spôsob vyjadrenia a spracovania kolekcií objektov.
  2. 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í:

  1. Medziľahlé operácie
  2. Ukončiť operácie

Medziľahlé operácie

operácie java stream

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í

  1. Metódy sú spojené.
  2. Medziľahlé operácie transformujú prúd na iný prúd.
  3. 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

  1. 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.
  2. Prúd sa používa na výpočet prvkov podľa zreťazených metód bez zmeny pôvodnej hodnoty objektu.