Pretok v Javi

Pretok v Javi

Stream je bil predstavljen v Java 8 Stream API se uporablja za obdelavo zbirk predmetov. Tok v Javi je zaporedje objektov, ki podpira različne metode, ki jih je mogoče cevovodno usmeriti, da ustvarijo želeni rezultat. 

Uporaba Stream v Javi

Spodaj so navedene uporabe Stream v Javi:

  • Stream API je način izražanja in obdelave zbirk objektov.
  • Omogočite nam izvajanje operacij, kot je filtriranje, preslikava, zmanjšanje in razvrščanje.

Kako ustvariti Java Stream

Ustvarjanje toka Java je eden najosnovnejših korakov pred obravnavo funkcionalnosti toka Java. Spodaj je podana sintaksa za deklariranje toka Java.

Sintaksa

Tok potok;

Tu je T bodisi objekt razreda ali podatkovni tip, odvisno od deklaracije.

Funkcije Java Stream

Funkcije tokov Java so omenjene spodaj:

  • Tok ni podatkovna struktura; vzame le vhod iz zbirk nizov ali V/I kanalov.
  • Tokovi ne spreminjajo izvirnih podatkov; le s svojimi metodami dajejo rezultate.
  • Vmesne operacije (kot je zemljevid filtra itd.) so lene in vrnejo drug tok, tako da jih lahko povežete.
  • Operacija terminala (kot je collect forEach count) konča tok in poda končni rezultat.

Različne operacije na tokovih

Obstajata dve vrsti operacij v tokovih:

  1. Vmesne operacije
  2. Operacije terminala

Vmesne operacije

Operacije Java Stream

Vmesne operacije so vrste operacij, pri katerih je več metod verižno povezanih v vrsto.

Značilnosti vmesnih operacij

  • Metode so povezane skupaj.
  • Vmesne operacije pretvorijo tok v drug tok.
  • Omogoča koncept filtriranja, kjer ena metoda filtrira podatke in jih po obdelavi posreduje drugi metodi.

Pomembne vmesne operacije

Spodaj je omenjenih nekaj vmesnih operacij:

1. zemljevid() : Metoda zemljevida se uporablja za vrnitev toka, sestavljenega iz rezultatov uporabe dane funkcije za elemente tega toka.

Sintaksa:

Tok zemljevid (funkcija maper)

2. filter() : Metoda filtra se uporablja za izbiro elementov glede na predikat, posredovan kot argument.

Sintaksa:

Tok filter (predikat predikat)

3. razvrščeno() : Razvrščena metoda se uporablja za razvrščanje toka.

Sintaksa:

Tok razvrščeno()
Tok razvrščeno (Primerjalnik primerjalnik)

4. flatMap(): Operacija flatMap v Java Streams se uporablja za sploščitev toka zbirk v en sam tok elementov.

Sintaksa:

Tok flatMap(funkcija > maper)

5. razločen() : Odstrani podvojene elemente. Vrne tok, sestavljen iz različnih elementov (v skladu z Object.equals(Object)).

Sintaksa:

Tok razločen()

6. pokukaj() : Izvede dejanje na vsakem elementu brez spreminjanja toka. Vrne tok, sestavljen iz elementov tega toka, ki poleg tega izvede zagotovljeno dejanje na vsakem elementu, ko se elementi porabijo iz nastalega toka.

Sintaksa:

Tok peek(potrošnik dejanje)

Program Java, ki prikazuje uporabo vseh vmesnih operacij:

Java
   import     java.util.Arrays  ;   import     java.util.HashSet  ;   import     java.util.List  ;   import     java.util.Set  ;   import     java.util.stream.Collectors  ;   public     class   StreamIntermediateOperationsExample     {      public     static     void     main  (  String  []     args  )     {      // List of lists of names      List   <  List   <  String  >>     listOfLists     =     Arrays  .  asList  (      Arrays  .  asList  (  'Reflection'       'Collection'       'Stream'  )      Arrays  .  asList  (  'Structure'       'State'       'Flow'  )      Arrays  .  asList  (  'Sorting'       'Mapping'       'Reduction'       'Stream'  )      );      // Create a set to hold intermediate results      Set   <  String  >     intermediateResults     =     new     HashSet   <>  ();      // Stream pipeline demonstrating various intermediate operations      List   <  String  >     result     =     listOfLists  .  stream  ()      .  flatMap  (  List  ::  stream  )         .  filter  (  s     ->     s  .  startsWith  (  'S'  ))         .  map  (  String  ::  toUpperCase  )         .  distinct  ()         .  sorted  ()         .  peek  (  s     ->     intermediateResults  .  add  (  s  ))      .  collect  (  Collectors  .  toList  ());         // Print the intermediate results      System  .  out  .  println  (  'Intermediate Results:'  );      intermediateResults  .  forEach  (  System  .  out  ::  println  );      // Print the final result      System  .  out  .  println  (  'Final Result:'  );      result  .  forEach  (  System  .  out  ::  println  );      }   }   

Izhod
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE  

Pojasnilo:

  • ListOfLists je ustvarjen kot seznam, ki vsebuje druge sezname nizov.
  • flatMap(Seznam::tok): Zravna ugnezdene sezname v en sam tok nizov.
  • filter(s -> s.startsWith('S')) : Filtrira nize tako, da vključujejo samo tiste, ki se začnejo na 'S'.
  • map(String::toUpperCase) : Pretvori vsak niz v toku v velike črke.
  • razločen() : Odstrani vse podvojene nize.
  • razvrščeno() : Razvrsti nastale nize po abecedi.
  • pokukaj(...): Doda vsak obdelan element naboru intermediateResults za vmesni pregled.
  • zbiraj(Collectors.toList()): Zbere končno obdelane nize v seznam, imenovan rezultat.

Program natisne vmesne rezultate, shranjene v nizu intermediateResults. Na koncu natisne seznam rezultatov, ki vsebuje v celoti obdelane nize po vseh operacijah toka.

Operacije terminala

Terminalske operacije so vrsta operacij, ki vrnejo rezultat. Te operacije se ne obdelujejo naprej, le vrnejo končno vrednost rezultata.

Pomembne operacije terminala

1. zbiraj() : Metoda collect se uporablja za vrnitev rezultatov vmesnih operacij, izvedenih v toku.

Sintaksa:

R collect(Zbiralec zbiralec)

2. forEach() : Metoda forEach se uporablja za ponavljanje skozi vsak element toka.

Sintaksa:

void forEach(Potrošnik dejanje)

3. zmanjšaj(): Metoda zmanjšanja se uporablja za zmanjšanje elementov toka na eno samo vrednost. Metoda redukcije vzame BinaryOperator kot parameter.

Sintaksa:

T reduce(T identiteta BinarniOperator akumulator)
Neobvezno zmanjšaj (binarnioperator akumulator)

4. štetje() : vrne število elementov v toku.

Sintaksa:

dolgo štetje()

5. findFirst() : vrne prvi element toka, če je prisoten.

Sintaksa:

Neobvezno findFirst()

6. allMatch() : preveri, ali se vsi elementi toka ujemajo z danim predikatom.

Sintaksa:

boolean allMatch(predikat predikat)

7. Anymatch () : preveri, ali se kateri koli element toka ujema z danim predikatom.

Sintaksa:

Boolean Anymatch (predikat predikat)

Tukaj je spremenljivki ans dodeljena 0 kot začetna vrednost in ji je dodan i.

Opomba: Vmesne operacije se izvajajo na podlagi koncepta lene ocene, ki zagotavlja, da vsaka metoda vrne fiksno vrednost (terminalsko operacijo), preden se premakne na naslednjo metodo.

Program Java z uporabo vseh terminalskih operacij:

Java
   import     java.util.*  ;   import     java.util.stream.Collectors  ;   public     class   StreamTerminalOperationsExample     {      public     static     void     main  (  String  []     args  )     {      // Sample data      List   <  String  >     names     =     Arrays  .  asList  (      'Reflection'       'Collection'       'Stream'        'Structure'       'Sorting'       'State'      );      // forEach: Print each name      System  .  out  .  println  (  'forEach:'  );      names  .  stream  ().  forEach  (  System  .  out  ::  println  );      // collect: Collect names starting with 'S' into a list      List   <  String  >     sNames     =     names  .  stream  ()      .  filter  (  name     ->     name  .  startsWith  (  'S'  ))      .  collect  (  Collectors  .  toList  ());      System  .  out  .  println  (  'ncollect (names starting with 'S'):'  );      sNames  .  forEach  (  System  .  out  ::  println  );      // reduce: Concatenate all names into a single string      String     concatenatedNames     =     names  .  stream  ().  reduce  (      ''        (  partialString       element  )     ->     partialString     +     ' '     +     element      );      System  .  out  .  println  (  'nreduce (concatenated names):'  );      System  .  out  .  println  (  concatenatedNames  .  trim  ());      // count: Count the number of names      long     count     =     names  .  stream  ().  count  ();      System  .  out  .  println  (  'ncount:'  );      System  .  out  .  println  (  count  );      // findFirst: Find the first name      Optional   <  String  >     firstName     =     names  .  stream  ().  findFirst  ();      System  .  out  .  println  (  'nfindFirst:'  );      firstName  .  ifPresent  (  System  .  out  ::  println  );      // allMatch: Check if all names start with 'S'      boolean     allStartWithS     =     names  .  stream  ().  allMatch  (      name     ->     name  .  startsWith  (  'S'  )      );      System  .  out  .  println  (  'nallMatch (all start with 'S'):'  );      System  .  out  .  println  (  allStartWithS  );      // anyMatch: Check if any name starts with 'S'      boolean     anyStartWithS     =     names  .  stream  ().  anyMatch  (      name     ->     name  .  startsWith  (  'S'  )      );      System  .  out  .  println  (  'nanyMatch (any start with 'S'):'  );      System  .  out  .  println  (  anyStartWithS  );      }   }   

Izhod:

StreamsOutputIzhod

Pojasnilo:

  • Seznam imen je ustvarjen z vzorčnimi nizi.
  • zaVsako: Natisne vsako ime na seznamu.
  • zbirati : filtrira imena, ki se začnejo s 'S', in jih zbere v nov seznam.
  • zmanjšati : združi vsa imena v en sam niz.
  • štetje : prešteje skupno število imen.
  • findFirst : poišče in natisne prvo ime na seznamu.
  • allMatch : preveri, ali se vsa imena začnejo na 'S'.
  • nesrečen : Preveri, ali se ime začne s 'S'.

Program natisne vsako ime imena, ki se začnejo na 'S' povezana imena število imen prvo ime ali se vsa imena začnejo na 'S' in ali se katero koli ime začne na 'S'.

Prednost Java Stream

Obstaja nekaj prednosti, zaradi katerih uporabljamo Stream v Javi, kot je navedeno spodaj:

  • Brez prostora za shranjevanje
  • Cevovod funkcij
  • lenoba
  • Lahko neskončno
  • Lahko se paralelizira
  • Lahko se ustvari iz nizov zbirk Datoteke Vrstice Metode v Stream IntStream itd.

Primeri uporabe tokov Java v resničnem svetu

Tokovi se pogosto uporabljajo v sodobnih aplikacijah Java za:

  • Obdelava podatkov
  • Za obdelavo odgovorov JSON/XML
  • Za operacije baze podatkov
  • Sočasna obdelava