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
Stream
prú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í:
- Medziľahlé operácie
- Terminálové operácie
Medziľahlé operácie

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:
Stream mapa (Funkcia super T ? extends R>mapovač)
2. filter() : Metóda filtra sa používa na výber prvkov podľa predikátu odovzdaného ako argument.
Syntax:
Stream
filter (predikát super T>predikát)
3. zoradené() : Metóda zoradené sa používa na triedenie prúdu.
Syntax:
Stream
zoradené ()
Streamzoradené (porovnávač super T>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:
Stream plochá mapa (Funkcia super T ? extends Stream extends R>> mapovač)
5. odlišný() : Odstráni duplicitné prvky. Vracia tok pozostávajúci z odlišných prvkov (podľa Object.equals(Object)).
Syntax:
Stream
odliš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:
Stream
nahliadnuť (Spotrebiteľ super T>akcia)
Java program, ktorý demonštruje použitie všetkých medzioperačných operácií:
Javaimport 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ľ super T A R>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ľa super T>akcia)
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 BinaryOperator
akumulátor)
Voliteľnéznížiť (BinaryOperator akumulá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(Predicate super T>predikát)
7. Anymatch () : Kontroluje, či sa niektorý prvok prúdu zhoduje s daným predikátom.
Syntax:
Boolean Anymatch (predikát super T>prediká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:
Javaimport 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:
VýstupVysvetlenie:
- 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