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.
pisanje json v datoteko python
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:
- Vmesne operacije
- Operacije terminala
Vmesne operacije

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 super T ? extends R>maper)
2. filter() : Metoda filtra se uporablja za izbiro elementov glede na predikat, posredovan kot argument.
Sintaksa:
Tok
filter (predikat super T>predikat)
3. razvrščeno() : Razvrščena metoda se uporablja za razvrščanje toka.
Sintaksa:
Tok
razvrščeno()
Tokrazvrščeno (Primerjalnik super T>primerjalnik)
4. flatMap(): Operacija flatMap v Java Streams se uporablja za sploščitev toka zbirk v en sam tok elementov.
Sintaksa:
gimp zamenja barvo
Tok flatMap(funkcija super T ? extends Stream extends R>> 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 super T>dejanje)
Program Java, ki prikazuje uporabo vseh vmesnih operacij:
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); } }
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 super T A R>zbiralec)
2. forEach() : Metoda forEach se uporablja za ponavljanje skozi vsak element toka.
Sintaksa:
void forEach(Potrošnik super T>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)
Neobveznozmanjš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() niz vsebuje javo
6. allMatch() : preveri, ali se vsi elementi toka ujemajo z danim predikatom.
Sintaksa:
boolean allMatch(predikat super T>predikat)
7. Anymatch () : preveri, ali se kateri koli element toka ujema z danim predikatom.
Sintaksa:
Boolean Anymatch (predikat super T>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:
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); } }
Izhod:
IzhodPojasnilo:
- 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