Srautas Java

Srautas Java

Srautas buvo pristatytas Java 8 Stream API naudojama objektų rinkiniams apdoroti. Srautas „Java“ yra objektų seka, palaikanti įvairius metodus, kuriuos galima sujungti, kad būtų pasiektas norimas rezultatas. 

Stream naudojimas Java

„Stream“ naudojimas „Java“ yra minimas toliau:

  • Stream API yra būdas išreikšti ir apdoroti objektų kolekcijas.
  • Leiskite mums atlikti tokias operacijas kaip filtravimo žemėlapių mažinimas ir rūšiavimas.

Kaip sukurti „Java Stream“.

„Java Stream“ kūrimas yra vienas iš pagrindinių žingsnių prieš svarstant „Java Stream“ funkcijas. Žemiau pateikiama „Java Stream“ deklaravimo sintaksė.

Sintaksė

Srautas upelis;

Čia T yra klasės objektas arba duomenų tipas, priklausomai nuo deklaracijos.

„Java Stream“ funkcijos

Toliau nurodytos „Java“ srautų funkcijos:

  • Srautas nėra duomenų struktūra; tiesiog reikia įvesties iš Collections Arrays arba I/O kanalų.
  • Srautai nekeičia pradinių duomenų; jie tik duoda rezultatus naudodami savo metodus.
  • Tarpinės operacijos (pvz., filtrų žemėlapis ir kt.) yra tingios ir grąžina kitą srautą, kad galėtumėte juos sujungti.
  • Terminalo operacija (pvz., surinkti už kiekvieną skaičių) baigia srautą ir pateikia galutinį rezultatą.

Įvairios operacijos srautuose

Yra dviejų tipų operacijos srautuose:

  1. Tarpinės operacijos
  2. Terminalo operacijos

Tarpinės operacijos

„Java Stream“ operacijos

Tarpinės operacijos yra operacijų tipai, kai keli metodai yra sujungti iš eilės.

Tarpinių operacijų charakteristikos

  • Metodai yra sujungti grandine.
  • Tarpinės operacijos srautą paverčia kitu srautu.
  • Tai įgalina filtravimo koncepciją, kai vienas metodas filtruoja duomenis ir po apdorojimo perduoda juos kitam metodui.

Svarbios tarpinės operacijos

Toliau pateikiamos kelios tarpinės operacijos:

1. žemėlapis () : žemėlapio metodas naudojamas norint grąžinti srautą, sudarytą iš duotosios funkcijos taikymo šio srauto elementams rezultatų.

Sintaksė:

Srautas žemėlapis (Funkcija kartografas)

2. filtras () : filtro metodas naudojamas elementams pasirinkti pagal predikatą, pateiktą kaip argumentą.

Sintaksė:

Srautas filtras (predikatas predikatas)

3. surūšiuotas() : Rūšiavimo metodas naudojamas srautui rūšiuoti.

Sintaksė:

Srautas surūšiuota ()
Srautas surūšiuotas (palyginimo priemonė lyginamoji priemonė)

4. plokščias žemėlapis(): „Java Streams“ operacija „flatMap“ naudojama kolekcijų srautui sujungti į vieną elementų srautą.

Sintaksė:

Srautas flatMap (Funkcija > kartografas)

5. skiriasi() : pašalina pasikartojančius elementus. Jis grąžina srautą, susidedantį iš skirtingų elementų (pagal Object.equals(Object)).

Sintaksė:

Srautas atskiras ()

6. žvilgtelėti () : atlieka veiksmą su kiekvienu elementu nekeisdamas srauto. Jis grąžina srautą, susidedantį iš šio srauto elementų, papildomai atliekant numatytą veiksmą su kiekvienu elementu, nes elementai sunaudojami iš gauto srauto.

Sintaksė:

Srautas žvilgtelėti (vartotojas veiksmas)

Java programa, kuri demonstruoja visų tarpinių operacijų naudojimą:

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  );      }   }   

Išvestis
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE  

Paaiškinimas:

  • ListOfLists sukuriamas kaip sąrašas, kuriame yra kitų eilučių sąrašų.
  • plokščias žemėlapis (sąrašas::srautas): Sulygina įdėtus sąrašus į vieną eilučių srautą.
  • filtras(s -> s.startsWith('S')) : Filtruoja eilutes, kad įtrauktų tik tas, kurios prasideda raide „S“.
  • žemėlapis (Eilutė::didžiosios raidės) : kiekvieną srauto eilutę paverčia didžiosiomis raidėmis.
  • atskiras () : pašalina visas pasikartojančias eilutes.
  • surūšiuota () : surūšiuoja gautas eilutes abėcėlės tvarka.
  • žvilgtelėti (...): Kiekvieną apdorotą elementą prideda prie tarpinių rezultatų rinkinio tarpiniam patikrinimui.
  • rinkti(Collectors.toList()): Surenka galutines apdorotas eilutes į sąrašą, vadinamą rezultatu.

Programa spausdina tarpinius rezultatus, saugomus tarpinių rezultatų rinkinyje. Galiausiai po visų srauto operacijų išspausdinamas rezultatų sąrašas, kuriame yra visiškai apdorotos eilutės.

Terminalo operacijos

Terminalo operacijos yra operacijų, kurios grąžina rezultatą, tipas. Šios operacijos toliau neapdorojamos, tik pateikia galutinę rezultato reikšmę.

Svarbios terminalo operacijos

1. rinkti () : rinkimo metodas naudojamas sraute atliktų tarpinių operacijų rezultatui grąžinti.

Sintaksė:

R rinkti (kolektorius kolekcionierius)

2. už kiekvieną () : ForEach metodas naudojamas kartoti kiekvieną srauto elementą.

Sintaksė:

negalioja kiekvienam (vartotojui veiksmas)

3. sumažinti (): Sumažinimo metodas naudojamas srauto elementams sumažinti iki vienos vertės. Sumažinimo metodas naudoja BinaryOperator kaip parametrą.

Sintaksė:

T sumažinti(T tapatybės dvejetainis operatorius akumuliatorius)
Neprivaloma sumažinti (BinaryOperator akumuliatorius)

4. skaičiuoti () : grąžina elementų skaičių sraute.

Sintaksė:

ilgas skaičius ()

5. FindFirst () : grąžina pirmąjį srauto elementą, jei jis yra.

Sintaksė:

Neprivaloma FindFirst ()

6. allMatch() : patikrina, ar visi srauto elementai atitinka nurodytą predikatą.

Sintaksė:

loginis allMatch(Predikatas predikatas)

7. Bet koks atitikimas () : patikrina, ar kuris nors srauto elementas atitinka nurodytą predikatą.

Sintaksė:

Būlio bet koks atitikimas (predikatas predikatas)

Čia ans kintamajam priskiriama 0 kaip pradinė reikšmė ir prie jo pridedamas i.

Pastaba: Tarpinės operacijos vykdomos remiantis tingaus vertinimo koncepcija, kuri užtikrina, kad kiekvienas metodas grąžintų fiksuotą reikšmę (terminalo operacija), prieš pereinant prie kito metodo.

Java programa, naudojanti visas terminalo operacijas:

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  );      }   }   

Išvestis:

Streams OutputIšvestis

Paaiškinimas:

  • Vardų sąrašas sukuriamas naudojant pavyzdines eilutes.
  • kiekvienam: Spausdina kiekvieną pavadinimą sąraše.
  • rinkti : Filtruoja pavadinimus, prasidedančius raide „S“, ir surenka juos į naują sąrašą.
  • sumažinti : sujungia visus vardus į vieną eilutę.
  • skaičiuoti : skaičiuoja bendrą vardų skaičių.
  • surask Pirma : suranda ir išspausdina pirmąjį vardą sąraše.
  • allMatch : patikrina, ar visi vardai prasideda raide „S“.
  • nepasisekė : patikrina, ar koks nors pavadinimas prasideda raide „S“.

Programa spausdina kiekvieno vardo pavadinimus, prasidedančius raide "S", sujungtus pavadinimus, vardų skaičių, vardų skaičių, ar visi vardai prasideda raide "S" ir ar kuris nors vardas prasideda raide "S".

„Java Stream“ pranašumas

Yra keletas privalumų, dėl kurių mes naudojame Stream Java, kaip nurodyta toliau:

  • Nėra saugyklos
  • Funkcijų vamzdynas
  • Tinginystė
  • Gali būti begalinis
  • Galima lygiagretinti
  • Galima sukurti iš kolekcijų masyvų Failai Linijos Metodai „Stream IntStream“ ir kt.

Realaus pasaulio „Java“ srautų naudojimo atvejai

Srautai plačiai naudojami šiuolaikinėse Java programose:

  • Duomenų apdorojimas
  • JSON / XML atsakymams apdoroti
  • Duomenų bazės operacijoms
  • Lygiagretus apdorojimas