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ė
Srautas
upelis;
Č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:
- Tarpinės operacijos
- Terminalo operacijos
Tarpinės operacijos

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 (Funkcija super T ? extends R>kartografas)
2. filtras () : filtro metodas naudojamas elementams pasirinkti pagal predikatą, pateiktą kaip argumentą.
Sintaksė:
Srautas
filtras (predikatas super T>predikatas)
3. surūšiuotas() : Rūšiavimo metodas naudojamas srautui rūšiuoti.
Sintaksė:
Srautas
surūšiuota ()
Srautassurūšiuotas (palyginimo priemonė super T>lyginamoji priemonė)
4. plokščias žemėlapis(): „Java Streams“ operacija „flatMap“ naudojama kolekcijų srautui sujungti į vieną elementų srautą.
Sintaksė:
Srautas flatMap (Funkcija super T ? extends Stream extends R>> kartografas)
5. skiriasi() : pašalina pasikartojančius elementus. Jis grąžina srautą, susidedantį iš skirtingų elementų (pagal Object.equals(Object)).
Sintaksė:
Srautas
atskiras ()
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 (vartotojas super T>veiksmas)
Java programa, kuri demonstruoja visų tarpinių operacijų naudojimą:
f filmaiJava
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 (kolektorius super T A R>kolekcionierius)
2. už kiekvieną () : ForEach metodas naudojamas kartoti kiekvieną srauto elementą.
Sintaksė:
negalioja kiekvienam (vartotojui super T>veiksmas)
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 operatorius
akumuliatorius)
Neprivalomasumažinti (BinaryOperator akumuliatorius)
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ė:
Neprivaloma
FindFirst () kelionė, bet
6. allMatch() : patikrina, ar visi srauto elementai atitinka nurodytą predikatą.
Sintaksė:
loginis allMatch(Predikatas super T>predikatas)
7. Bet koks atitikimas () : patikrina, ar kuris nors srauto elementas atitinka nurodytą predikatą.
Sintaksė:
Būlio bet koks atitikimas (predikatas super T>predikatas)
Č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:
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); } }
Išvestis:
IšvestisPaaiš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