logo

Pretok v Javi

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

Tokpotok;

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:

  1. Vmesne operacije
  2. Operacije terminala

Vmesne operacije

Operacije Java Stream' title=

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:

Tokzemljevid (funkcijamaper)

2. filter() : Metoda filtra se uporablja za izbiro elementov glede na predikat, posredovan kot argument.

Sintaksa:

Tokfilter (predikatpredikat)

3. razvrščeno() : Razvrščena metoda se uporablja za razvrščanje toka.

Sintaksa:

Tokrazvrščeno()
Tokrazvrščeno (Primerjalnikprimerjalnik)

4. flatMap(): Operacija flatMap v Java Streams se uporablja za sploščitev toka zbirk v en sam tok elementov.

Sintaksa:

gimp zamenja barvo

TokflatMap(funkcija> maper)

5. razločen() : Odstrani podvojene elemente. Vrne tok, sestavljen iz različnih elementov (v skladu z Object.equals(Object)).

Sintaksa:

Tokrazloč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:

Tokpeek(potrošnikdejanje)

Program Java, ki prikazuje uporabo vseh vmesnih operacij:

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

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(Zbiraleczbiralec)

2. forEach() : Metoda forEach se uporablja za ponavljanje skozi vsak element toka.

Sintaksa:

void forEach(Potrošnikdejanje)

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 BinarniOperatorakumulator)
Neobveznozmanjšaj (binarnioperatorakumulator)

4. štetje() : vrne število elementov v toku.

Sintaksa:

dolgo štetje()

5. findFirst() : vrne prvi element toka, če je prisoten.

Sintaksa:

NeobveznofindFirst()

niz vsebuje javo

6. allMatch() : preveri, ali se vsi elementi toka ujemajo z danim predikatom.

Sintaksa:

boolean allMatch(predikatpredikat)

7. Anymatch () : preveri, ali se kateri koli element toka ujema z danim predikatom.

Sintaksa:

Boolean Anymatch (predikatpredikat)

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:

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

Izhod:

StreamsOutput' loading='lazy' title=Izhod

Pojasnilo:

  • 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