logo

Srautas Java

Srautas buvo pristatytas Java 8 Stream API naudojama objektų rinkiniams apdoroti. Srautas „Java“ yra objektų seka, palaikanti įvairius metodus, kuriuos galima sujungti, kad būtų pasiektas norimas rezultatas. 

Stream naudojimas Java

„Stream“ naudojimas „Java“ yra minimas toliau:



  • Stream API yra būdas išreikšti ir apdoroti objektų kolekcijas.
  • Leiskite mums atlikti tokias operacijas kaip filtravimo žemėlapių mažinimas ir rūšiavimas.

Kaip sukurti „Java Stream“.

„Java Stream“ kūrimas yra vienas iš pagrindinių žingsnių prieš svarstant „Java Stream“ funkcijas. Žemiau pateikiama „Java Stream“ deklaravimo sintaksė.

kairysis sujungimas vs dešinysis sujungimas

Sintaksė

Srautasupelis;

Čia T yra klasės objektas arba duomenų tipas, priklausomai nuo deklaracijos.



„Java Stream“ funkcijos

Toliau nurodytos „Java“ srautų funkcijos:

  • Srautas nėra duomenų struktūra; tiesiog reikia įvesties iš Collections Arrays arba I/O kanalų.
  • Srautai nekeičia pradinių duomenų; jie tik duoda rezultatus naudodami savo metodus.
  • Tarpinės operacijos (pvz., filtrų žemėlapis ir kt.) yra tingios ir grąžina kitą srautą, kad galėtumėte juos sujungti.
  • Terminalo operacija (pvz., surinkti už kiekvieną skaičių) baigia srautą ir pateikia galutinį rezultatą.

Įvairios operacijos srautuose

Yra dviejų tipų operacijos srautuose:

  1. Tarpinės operacijos
  2. Terminalo operacijos

Tarpinės operacijos

„Java Stream“ operacijos' title=



Tarpinės operacijos yra operacijų tipai, kai keli metodai yra sujungti iš eilės.

Tarpinių operacijų charakteristikos

  • Metodai yra sujungti grandine.
  • Tarpinės operacijos srautą paverčia kitu srautu.
  • Tai įgalina filtravimo koncepciją, kai vienas metodas filtruoja duomenis ir po apdorojimo perduoda juos kitam metodui.

Svarbios tarpinės operacijos

Toliau pateikiamos kelios tarpinės operacijos:

1. žemėlapis () : žemėlapio metodas naudojamas norint grąžinti srautą, sudarytą iš duotosios funkcijos taikymo šio srauto elementams rezultatų.

Sintaksė:

Srautasžemėlapis (Funkcijakartografas)

2. filtras () : filtro metodas naudojamas elementams pasirinkti pagal predikatą, pateiktą kaip argumentą.

Sintaksė:

Srautasfiltras (predikataspredikatas)

3. surūšiuotas() : Rūšiavimo metodas naudojamas srautui rūšiuoti.

Sintaksė:

Srautassurūšiuota ()
Srautassurūšiuotas (palyginimo priemonėlyginamoji priemonė)

4. plokščias žemėlapis(): „Java Streams“ operacija „flatMap“ naudojama kolekcijų srautui sujungti į vieną elementų srautą.

Sintaksė:

SrautasflatMap (Funkcija> kartografas)

5. skiriasi() : pašalina pasikartojančius elementus. Jis grąžina srautą, susidedantį iš skirtingų elementų (pagal Object.equals(Object)).

Sintaksė:

Srautasatskiras ()

6. žvilgtelėti () : atlieka veiksmą su kiekvienu elementu nekeisdamas srauto. Jis grąžina srautą, susidedantį iš šio srauto elementų, papildomai atliekant numatytą veiksmą su kiekvienu elementu, nes elementai sunaudojami iš gauto srauto.

Sintaksė:

Srautasžvilgtelėti (vartotojasveiksmas)

Java programa, kuri demonstruoja visų tarpinių operacijų naudojimą:

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

Išvestis
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE 

Paaiškinimas:

  • ListOfLists sukuriamas kaip sąrašas, kuriame yra kitų eilučių sąrašų.
  • plokščias žemėlapis (sąrašas::srautas): Sulygina įdėtus sąrašus į vieną eilučių srautą.
  • filtras(s -> s.startsWith('S')) : Filtruoja eilutes, kad įtrauktų tik tas, kurios prasideda raide „S“.
  • žemėlapis (Eilutė::didžiosios raidės) : kiekvieną srauto eilutę paverčia didžiosiomis raidėmis.
  • atskiras () : pašalina visas pasikartojančias eilutes.
  • surūšiuota () : surūšiuoja gautas eilutes abėcėlės tvarka.
  • žvilgtelėti (...): Kiekvieną apdorotą elementą prideda prie tarpinių rezultatų rinkinio tarpiniam patikrinimui.
  • rinkti(Collectors.toList()): Surenka galutines apdorotas eilutes į sąrašą, vadinamą rezultatu.

Programa spausdina tarpinius rezultatus, saugomus tarpinių rezultatų rinkinyje. Galiausiai po visų srauto operacijų išspausdinamas rezultatų sąrašas, kuriame yra visiškai apdorotos eilutės.

Terminalo operacijos

Terminalo operacijos yra operacijų, kurios grąžina rezultatą, tipas. Šios operacijos toliau neapdorojamos, tik pateikia galutinę rezultato reikšmę.

Svarbios terminalo operacijos

1. rinkti () : rinkimo metodas naudojamas sraute atliktų tarpinių operacijų rezultatui grąžinti.

Sintaksė:

R rinkti (kolektoriuskolekcionierius)

2. už kiekvieną () : ForEach metodas naudojamas kartoti kiekvieną srauto elementą.

Sintaksė:

negalioja kiekvienam (vartotojuiveiksmas)

3. sumažinti (): Sumažinimo metodas naudojamas srauto elementams sumažinti iki vienos vertės. Sumažinimo metodas naudoja BinaryOperator kaip parametrą.

Sintaksė:

T sumažinti(T tapatybės dvejetainis operatoriusakumuliatorius)
Neprivalomasumažinti (BinaryOperatorakumuliatorius)

4. skaičiuoti () : grąžina elementų skaičių sraute.

Sintaksė:

ilgas skaičius ()

5. FindFirst () : grąžina pirmąjį srauto elementą, jei jis yra.

Sintaksė:

NeprivalomaFindFirst ()

kelionė, bet

6. allMatch() : patikrina, ar visi srauto elementai atitinka nurodytą predikatą.

Sintaksė:

loginis allMatch(Predikataspredikatas)

7. Bet koks atitikimas () : patikrina, ar kuris nors srauto elementas atitinka nurodytą predikatą.

Sintaksė:

Būlio bet koks atitikimas (predikataspredikatas)

Čia ans kintamajam priskiriama 0 kaip pradinė reikšmė ir prie jo pridedamas i.

Pastaba: Tarpinės operacijos vykdomos remiantis tingaus vertinimo koncepcija, kuri užtikrina, kad kiekvienas metodas grąžintų fiksuotą reikšmę (terminalo operacija), prieš pereinant prie kito metodo.

Java programa, naudojanti visas terminalo operacijas:

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

Išvestis:

Streams Output' loading='lazy' title=Išvestis

Paaiškinimas:

  • Vardų sąrašas sukuriamas naudojant pavyzdines eilutes.
  • kiekvienam: Spausdina kiekvieną pavadinimą sąraše.
  • rinkti : Filtruoja pavadinimus, prasidedančius raide „S“, ir surenka juos į naują sąrašą.
  • sumažinti : sujungia visus vardus į vieną eilutę.
  • skaičiuoti : skaičiuoja bendrą vardų skaičių.
  • surask Pirma : suranda ir išspausdina pirmąjį vardą sąraše.
  • allMatch : patikrina, ar visi vardai prasideda raide „S“.
  • nepasisekė : patikrina, ar koks nors pavadinimas prasideda raide „S“.

Programa spausdina kiekvieno vardo pavadinimus, prasidedančius raide "S", sujungtus pavadinimus, vardų skaičių, vardų skaičių, ar visi vardai prasideda raide "S" ir ar kuris nors vardas prasideda raide "S".

„Java Stream“ pranašumas

Yra keletas privalumų, dėl kurių mes naudojame Stream Java, kaip nurodyta toliau:

  • Nėra saugyklos
  • Funkcijų vamzdynas
  • Tinginystė
  • Gali būti begalinis
  • Galima lygiagretinti
  • Galima sukurti iš kolekcijų masyvų Failai Linijos Metodai „Stream IntStream“ ir kt.

Realaus pasaulio „Java“ srautų naudojimo atvejai

Srautai plačiai naudojami šiuolaikinėse Java programose:

  • Duomenų apdorojimas
  • JSON / XML atsakymams apdoroti
  • Duomenų bazės operacijoms
  • Lygiagretus apdorojimas