Stream v Javě

Stream v Javě

Stream byl zaveden v r Java 8 Stream API se používá ke zpracování kolekcí objektů. Proud v Javě je posloupnost objektů, které podporují různé metody, které mohou být zřetězeny k dosažení požadovaného výsledku. 

Použití Stream v Javě

Použití Streamu v Javě je uvedeno níže:

  • Stream API je způsob, jak vyjádřit a zpracovat kolekce objektů.
  • Umožněte nám provádět operace, jako je filtrování, redukce mapování a řazení.

Jak vytvořit Java Stream

Vytvoření Java Stream je jedním z nejzákladnějších kroků před zvažováním funkcí Java Stream. Níže je uvedena syntaxe pro deklaraci Java Stream.

Syntax

Proud proud;

Zde T je buď objekt třídy nebo datový typ v závislosti na deklaraci.

Funkce Java Stream

Vlastnosti Java streamů jsou uvedeny níže:

  • Stream není datová struktura; pouze přebírá vstup z polí kolekcí nebo I/O kanálů.
  • Proudy nemění původní data; výsledky dosahují pouze pomocí svých metod.
  • Mezilehlé operace (jako je mapa filtru atd.) jsou líné a vracejí jiný Stream, takže je můžete spojit dohromady.
  • Terminálová operace (jako collect forEach count) ukončí stream a poskytne konečný výsledek.

Různé operace na proudech

Ve streamech existují dva typy operací:

  1. Mezilehlé operace
  2. Terminálové operace

Mezilehlé operace

Operace Java Stream

Mezilehlé operace jsou typy operací, ve kterých je několik metod zřetězeno za sebou.

Charakteristika mezioperačních operací

  • Metody jsou spojeny dohromady.
  • Mezilehlé operace transformují proud na jiný proud.
  • Umožňuje koncept filtrování, kdy jedna metoda filtruje data a po zpracování je předává jiné metodě.

Důležité přechodné operace

Níže je uvedeno několik přechodných operací:

1. mapa() : Metoda map slouží k vrácení proudu sestávajícího z výsledků aplikace dané funkce na prvky tohoto proudu.

Syntax:

Proud mapa (Funkce mapovač)

2. filtr() : Metoda filtru se používá k výběru prvků podle predikátu předaného jako argument.

Syntax:

Proud filtr (predikát predikát)

3. seřazeno() : Metoda třídění se používá k řazení proudu.

Syntax:

Proud seřazeno()
Proud seřazeno (Porovnávač srovnávač)

4. plochá mapa(): Operace flatMap v Java Streams se používá ke sloučení proudu kolekcí do jediného proudu prvků.

Syntax:

Proud plochá mapa (Funkce > mapovač)

5. odlišný() : Odstraní duplicitní prvky. Vrací proud sestávající z odlišných prvků (podle Object.equals(Object)).

Syntax:

Proud odlišný()

6. nahlédnout() : Provede akci s každým prvkem bez úpravy proudu. Vrací tok sestávající z prvků tohoto toku, který navíc provádí poskytnutou akci na každém prvku, protože prvky jsou spotřebovány z výsledného toku.

Syntax:

Proud nahlédnout (Spotřebitel akce)

Java program, který demonstruje použití všech mezioperačních operací:

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

Výstup
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE  

Vysvětlení:

  • ListOfLists je vytvořen jako seznam obsahující další seznamy řetězců.
  • plochá mapa(Seznam::stream): Sloučí vnořené seznamy do jednoho proudu řetězců.
  • filtr(s -> s.startsWith('S')) : Filtruje řetězce tak, aby zahrnovaly pouze ty, které začínají na „S“.
  • map(String::toUpperCase) : Převede každý řetězec v proudu na velká písmena.
  • odlišný() : Odstraní všechny duplicitní řetězce.
  • seřazeno() : Seřadí výsledné řetězce abecedně.
  • nahlédnout (...): Přidá každý zpracovaný prvek do sady mezilehlých výsledků pro průběžnou kontrolu.
  • collect(Collectors.toList()): Shromažďuje konečné zpracované řetězce do seznamu s názvem result.

Program vytiskne mezivýsledky uložené v sadě mezivýsledků. Nakonec vytiskne seznam výsledků, který obsahuje plně zpracované řetězce po všech operacích streamu.

Terminálové operace

Terminálové operace jsou typem operací, které vracejí výsledek. Tyto operace nejsou dále zpracovávány, pouze vrací konečnou výslednou hodnotu.

Důležité operace terminálu

1. sbírat() : Metoda shromažďování se používá k vrácení výsledku mezioperačních operací provedených na datovém proudu.

Syntax:

R sbírat (Sběratel kolektor)

2. forEach() : Metoda forEach se používá k iteraci každého prvku proudu.

Syntax:

neplatné pro každého (spotřebitele akce)

3. snížit(): Metoda redukce se používá k redukci prvků proudu na jednu hodnotu. Metoda snížení bere jako parametr BinaryOperator.

Syntax:

T redukovat (T identity BinaryOperator akumulátor)
Volitelný snížit (BinaryOperator akumulátor)

4. počítat() : Vrátí počet prvků v proudu.

Syntax:

dlouhý počet ()

5. findFirst() : Vrátí první prvek proudu, pokud je přítomen.

Syntax:

Volitelný findFirst()

6. allMatch() : Kontroluje, zda všechny prvky proudu odpovídají danému predikátu.

Syntax:

boolean allMatch(Predicate predikát)

7. Anymatch () : Kontroluje, zda některý prvek proudu odpovídá danému predikátu.

Syntax:

Boolean Anymatch (predikát predikát)

Zde je proměnné ans přiřazena 0 jako počáteční hodnota a je k ní přidáno i.

Poznámka: Mezilehlé operace běží na základě konceptu líného hodnocení, který zajišťuje, že každá metoda vrátí pevnou hodnotu (terminální operace) před přechodem na další metodu.

Program Java využívající všechny operace terminálu:

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

výstup:

StreamsOutputVýstup

Vysvětlení:

  • Seznam jmen je vytvořen pomocí vzorových řetězců.
  • pro každého: Vytiskne každé jméno v seznamu.
  • sbírat : Filtruje názvy začínající na „S“ a shromažďuje je do nového seznamu.
  • snížit : Zřetězí všechna jména do jednoho řetězce.
  • počítat : Spočítá celkový počet jmen.
  • findFirst : Vyhledá a vytiskne křestní jméno v seznamu.
  • allMatch : Zkontroluje, zda všechna jména začínají na 'S'.
  • nešťastný : Kontroluje, zda nějaké jméno začíná na 'S'.

Program vypíše každé jméno jména začínající na 'S' zřetězená jména počet jmen křestní jméno, zda všechna jména začínají na 'S' a zda nějaké jméno začíná na 'S'.

Výhoda Java Stream

Existují některé výhody, kvůli kterým používáme Stream v Javě, jak je uvedeno níže:

  • Žádné úložiště
  • Pipeline of Functions
  • Lenost
  • Může být nekonečný
  • Lze paralelizovat
  • Lze vytvořit z polí kolekcí Soubory Řádky Metody v Stream IntStream atd.

Případy použití Java streamů v reálném světě

Streamy jsou široce používány v moderních Java aplikacích pro:

  • Zpracování dat
  • Pro zpracování odpovědí JSON/XML
  • Pro databázové operace
  • Souběžné zpracování