logo

Stream v Jave

Stream bol predstavený v r Java 8 Stream API 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

Využitie Streamu v Jave je uvedené nižšie:

  • Stream API je spôsob vyjadrenia a spracovania kolekcií objektov.
  • Umožnite nám vykonávať operácie, ako je filtrovanie, zmenšenie mapovania 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 na deklarovanie Java Stream.



inicializačný zoznam pythonu

Syntax

Streamprúd;

Tu je T buď objekt triedy alebo dátový typ v závislosti od deklarácie.

Funkcie Java Stream

Funkcie Java streamov sú uvedené nižšie:

  • Stream nie je dátová štruktúra; berie len vstup z kolekcií alebo I/O kanálov.
  • Prúdy nemenia pôvodné údaje; výsledky dosahujú len pomocou svojich metód.
  • Prechodné operácie (napríklad filtračná mapa atď.) sú lenivé a vracajú ďalší stream, takže ich môžete spojiť.
  • Operácia terminálu (napríklad zhromažďovanie pre každý počet) ukončí stream a poskytne konečný výsledok.

Rôzne operácie na streamoch

V streamoch existujú dva typy operácií:

  1. Medziľahlé operácie
  2. Terminálové operácie

Medziľahlé operácie

Operácie Java Stream' title=

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.

Dôležité prechodné operácie

Nižšie je uvedených niekoľko prechodných operácií:

1. mapa() : Metóda mapy sa používa na vrátenie prúdu pozostávajúceho z výsledkov aplikácie danej funkcie na prvky tohto prúdu.

Syntax:

Streammapa (Funkciamapovač)

2. filter() : Metóda filtra sa používa na výber prvkov podľa predikátu odovzdaného ako argument.

Syntax:

Streamfilter (predikátpredikát)

3. zoradené() : Metóda zoradené sa používa na triedenie prúdu.

Syntax:

Streamzoradené ()
Streamzoradené (porovnávačporovnávač)

4. plochá mapa(): Operácia flatMap v Java Streams sa používa na zlúčenie prúdu kolekcií do jedného prúdu prvkov.

Syntax:

Streamplochá mapa (Funkcia> mapovač)

5. odlišný() : Odstráni duplicitné prvky. Vracia tok pozostávajúci z odlišných prvkov (podľa Object.equals(Object)).

Syntax:

Streamodlišný ()

6. nahliadnuť () : Vykoná akciu na každom prvku bez úpravy streamu. Vracia tok pozostávajúci z prvkov tohto toku, ktorý dodatočne vykonáva poskytnutú akciu na každom prvku, pretože prvky sú spotrebované z výsledného toku.

Syntax:

Streamnahliadnuť (Spotrebiteľakcia)

Java program, ktorý demonštruje použitie všetkých medzioperačných operácií:

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 

Vysvetlenie:

  • ListOfLists je vytvorený ako zoznam obsahujúci ďalšie zoznamy reťazcov.
  • plochá mapa(Zoznam::stream): Zlúči vnorené zoznamy do jedného prúdu reťazcov.
  • filter(s -> s.startsWith('S')) : Filtruje reťazce tak, aby obsahovali iba tie, ktoré začínajú na „S“.
  • map(String::toUpperCase) : Prevedie každý reťazec v streame na veľké písmená.
  • odlišný () : Odstráni všetky duplicitné reťazce.
  • zoradené () : Zoradí výsledné reťazce podľa abecedy.
  • nahliadnuť (...): Pridá každý spracovaný prvok do sady medziľahlých výsledkov pre priebežnú kontrolu.
  • collect(Collectors.toList()): Zhromažďuje konečné spracované reťazce do zoznamu nazývaného výsledok.

Program vytlačí medzivýsledky uložené v sade medzivýsledkov. Nakoniec vytlačí zoznam výsledkov, ktorý obsahuje plne spracované reťazce po všetkých streamovacích operáciách.

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

1. zbierať () : Metóda zhromažďovania sa používa na vrátenie výsledku medzioperácií vykonaných na toku.

Syntax:

skener java

R zbierať (zberateľzberateľ)

2. forEach() : Metóda forEach sa používa na iteráciu cez každý prvok prúdu.

Syntax:

neplatné pre každého (spotrebiteľaakcia)

3. znížiť(): Metóda redukcie sa používa na redukciu prvkov toku na jednu hodnotu. Metóda redukcie berie ako parameter BinaryOperator.

Syntax:

T redukovať (T identity BinaryOperatorakumulátor)
Voliteľnéznížiť (BinaryOperatorakumulátor)

4. počet() : Vráti počet prvkov v prúde.

Syntax:

dlhý počet ()

5. findFirst() : Vráti prvý prvok prúdu, ak je prítomný.

Syntax:

VoliteľnéfindFirst()

ak inak v jave

6. allMatch() : Kontroluje, či sa všetky prvky prúdu zhodujú s daným predikátom.

Syntax:

boolean allMatch(Predicatepredikát)

7. Anymatch () : Kontroluje, či sa niektorý prvok prúdu zhoduje s daným predikátom.

Syntax:

Boolean Anymatch (predikátpredikát)

Tu sa premennej ans priradí 0 ako počiatočná hodnota a pripočíta sa k nej i.

Poznámka: Priebežné operácie sú spustené na základe konceptu Lazy Evaluation, ktorý zabezpečuje, že každá metóda vráti pevnú hodnotu (terminálna operácia) pred prechodom na ďalšiu metódu.

Program Java využívajúci všetky operácie 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:

StreamsOutput' loading='lazy' title=Výstup

Vysvetlenie:

  • Zoznam mien je vytvorený pomocou vzorových reťazcov.
  • pre každého: Vytlačí každé meno v zozname.
  • zbierať : Filtruje názvy začínajúce na „S“ a zhromažďuje ich do nového zoznamu.
  • znížiť : Spojí všetky mená do jedného reťazca.
  • počítať : Spočíta celkový počet mien.
  • findFirst : Vyhľadá a vytlačí krstné meno v zozname.
  • allMatch : Skontroluje, či všetky mená začínajú na „S“.
  • smolu : Kontroluje, či nejaké meno začína na „S“.

Program vypíše mená každého mena začínajúce na 'S' zreťazené mená počet mien krstné meno, či všetky mená začínajú na 'S' a či nejaké meno začína na 'S'.

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ť
  • Možno vytvoriť z polí kolekcií Súbory Riadky Metódy v Stream IntStream atď.

Prípady použitia streamov Java v reálnom svete

Streamy sú široko používané v moderných Java aplikáciách pre:

  • Spracovanie údajov
  • Na spracovanie odpovedí JSON/XML
  • Pre databázové operácie
  • Súbežné spracovanie