Stream byl zaveden v r Java 8 Stream API se používá ke zpracování kolekcí objektů. Proud v Javě je posloupnost objektů, které podporují různé metody, které mohou být zřetězeny k dosažení požadovaného výsledku.
Použití Stream v Javě
Použití Streamu v Javě je uvedeno níže:
- Stream API je způsob, jak vyjádřit a zpracovat kolekce objektů.
- Umožněte nám provádět operace, jako je filtrování, redukce mapování a řazení.
Jak vytvořit Java Stream
Vytvoření Java Stream je jedním z nejzákladnějších kroků před zvažováním funkcí Java Stream. Níže je uvedena syntaxe pro deklaraci Java Stream.
harald baldr
Syntax
Proud
proud;
Zde T je buď objekt třídy nebo datový typ v závislosti na deklaraci.
Funkce Java Stream
Vlastnosti Java streamů jsou uvedeny níže:
- Stream není datová struktura; pouze přebírá vstup z polí kolekcí nebo I/O kanálů.
- Proudy nemění původní data; výsledky dosahují pouze pomocí svých metod.
- Mezilehlé operace (jako je mapa filtru atd.) jsou líné a vracejí jiný Stream, takže je můžete spojit dohromady.
- Terminálová operace (jako collect forEach count) ukončí stream a poskytne konečný výsledek.
Různé operace na proudech
Ve streamech existují dva typy operací:
- Mezilehlé operace
- Terminálové operace
Mezilehlé operace

Mezilehlé operace jsou typy operací, ve kterých je několik metod zřetězeno za sebou.
Charakteristika mezioperačních operací
- Metody jsou spojeny dohromady.
- Mezilehlé operace transformují proud na jiný proud.
- Umožňuje koncept filtrování, kdy jedna metoda filtruje data a po zpracování je předává jiné metodě.
Důležité přechodné operace
Níže je uvedeno několik přechodných operací:
1. mapa() : Metoda map slouží k vrácení proudu sestávajícího z výsledků aplikace dané funkce na prvky tohoto proudu.
Syntax:
Proud mapa (Funkce super T ? extends R>mapovač)
2. filtr() : Metoda filtru se používá k výběru prvků podle predikátu předaného jako argument.
Syntax:
Proud
filtr (predikát super T>predikát)
3. seřazeno() : Metoda třídění se používá k řazení proudu.
Syntax:
Proud
seřazeno()
Proudseřazeno (Porovnávač super T>srovnávač)
4. plochá mapa(): Operace flatMap v Java Streams se používá ke sloučení proudu kolekcí do jediného proudu prvků.
Syntax:
Proud plochá mapa (Funkce super T ? extends Stream extends R>> mapovač)
5. odlišný() : Odstraní duplicitní prvky. Vrací proud sestávající z odlišných prvků (podle Object.equals(Object)).
Syntax:
Proud
odlišný()
6. nahlédnout() : Provede akci s každým prvkem bez úpravy proudu. Vrací tok sestávající z prvků tohoto toku, který navíc provádí poskytnutou akci na každém prvku, protože prvky jsou spotřebovány z výsledného toku.
Syntax:
Proud
nahlédnout (Spotřebitel super T>akce)
Java program, který demonstruje použití všech mezioperačních operací:
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
Vysvětlení:
- ListOfLists je vytvořen jako seznam obsahující další seznamy řetězců.
- plochá mapa(Seznam::stream): Sloučí vnořené seznamy do jednoho proudu řetězců.
- filtr(s -> s.startsWith('S')) : Filtruje řetězce tak, aby zahrnovaly pouze ty, které začínají na „S“.
- map(String::toUpperCase) : Převede každý řetězec v proudu na velká písmena.
- odlišný() : Odstraní všechny duplicitní řetězce.
- seřazeno() : Seřadí výsledné řetězce abecedně.
- nahlédnout (...): Přidá každý zpracovaný prvek do sady mezilehlých výsledků pro průběžnou kontrolu.
- collect(Collectors.toList()): Shromažďuje konečné zpracované řetězce do seznamu s názvem result.
Program vytiskne mezivýsledky uložené v sadě mezivýsledků. Nakonec vytiskne seznam výsledků, který obsahuje plně zpracované řetězce po všech operacích streamu.
Terminálové operace
Terminálové operace jsou typem operací, které vracejí výsledek. Tyto operace nejsou dále zpracovávány, pouze vrací konečnou výslednou hodnotu.
Důležité operace terminálu
1. sbírat() : Metoda shromažďování se používá k vrácení výsledku mezioperačních operací provedených na datovém proudu.
Syntax:
R sbírat (Sběratel super T A R>kolektor)
2. forEach() : Metoda forEach se používá k iteraci každého prvku proudu.
Syntax:
neplatné pro každého (spotřebitele super T>akce)
3. snížit(): Metoda redukce se používá k redukci prvků proudu na jednu hodnotu. Metoda snížení bere jako parametr BinaryOperator.
Syntax:
k-nn algoritmus
T redukovat (T identity BinaryOperator
akumulátor)
Volitelnýsnížit (BinaryOperator akumulátor)
4. počítat() : Vrátí počet prvků v proudu.
Syntax:
dlouhý počet ()
5. findFirst() : Vrátí první prvek proudu, pokud je přítomen.
Syntax:
Volitelný
findFirst() pokud jinak v Javě
6. allMatch() : Kontroluje, zda všechny prvky proudu odpovídají danému predikátu.
Syntax:
boolean allMatch(Predicate super T>predikát)
7. Anymatch () : Kontroluje, zda některý prvek proudu odpovídá danému predikátu.
Syntax:
Boolean Anymatch (predikát super T>predikát)
Zde je proměnné ans přiřazena 0 jako počáteční hodnota a je k ní přidáno i.
Poznámka: Mezilehlé operace běží na základě konceptu líného hodnocení, který zajišťuje, že každá metoda vrátí pevnou hodnotu (terminální operace) před přechodem na další metodu.
Program Java využívající všechny operace 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ýstupVysvětlení:
- Seznam jmen je vytvořen pomocí vzorových řetězců.
- pro každého: Vytiskne každé jméno v seznamu.
- sbírat : Filtruje názvy začínající na „S“ a shromažďuje je do nového seznamu.
- snížit : Zřetězí všechna jména do jednoho řetězce.
- počítat : Spočítá celkový počet jmen.
- findFirst : Vyhledá a vytiskne křestní jméno v seznamu.
- allMatch : Zkontroluje, zda všechna jména začínají na 'S'.
- nešťastný : Kontroluje, zda nějaké jméno začíná na 'S'.
Program vypíše každé jméno jména začínající na 'S' zřetězená jména počet jmen křestní jméno, zda všechna jména začínají na 'S' a zda nějaké jméno začíná na 'S'.
Výhoda Java Stream
Existují některé výhody, kvůli kterým používáme Stream v Javě, jak je uvedeno níže:
- Žádné úložiště
- Pipeline of Functions
- Lenost
- Může být nekonečný
- Lze paralelizovat
- Lze vytvořit z polí kolekcí Soubory Řádky Metody v Stream IntStream atd.
Případy použití Java streamů v reálném světě
Streamy jsou široce používány v moderních Java aplikacích pro:
- Zpracování dat
- Pro zpracování odpovědí JSON/XML
- Pro databázové operace
- Souběžné zpracování