logo

Stream v Javě

Stream API, představené v Javě 8, 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ě

Níže jsou uvedena použití Stream v Javě:

  1. Stream API je způsob, jak vyjádřit a zpracovat kolekce objektů.
  2. Umožněte nám provádět operace jako filtrování, mapování, zmenšová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, jak deklarovat Java Stream.



Syntax

Stream stream;>

Zde T je buď třída, objekt nebo datový typ v závislosti na deklaraci.

Funkce Java Stream

Vlastnosti Java streamu jsou uvedeny níže:

  • Proud není datová struktura, místo toho přijímá vstup z kolekcí, polí nebo I/O kanálů.
  • Streamy nemění původní datovou strukturu, poskytují pouze výsledek podle zřetězených metod.
  • Každá mezioperační operace je prováděna líně a jako výsledek vrací proud, takže mohou být zřetězeny různé mezioperační operace. Terminálové operace označují konec proudu a vrací výsledek.

Různé operace na proudech

Ve streamech existují dva typy operací:

  1. Mezilehlé operace
  2. Ukončit operace

Mezilehlé operace

operace java stream

Mezilehlé operace jsou typy operací, ve kterých je několik metod zřetězeno za sebou.

Charakteristika mezioperačních operací

  1. Metody jsou spojeny dohromady.
  2. Mezilehlé operace transformují proud na jiný proud.
  3. Umožňuje koncept filtrování, kdy jedna metoda filtruje data a po zpracování je předává jiné metodě.

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 kolekcí, polí, řádků souborů, metod ve streamu, IntStream atd.

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.

List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());>

2. filtr()

Metoda filtru se používá k výběru prvků podle predikátu předaného jako argument.

List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().filter(s->s.startsWith('S')).collect(Collectors.toList());>

3. seřazeno()

Metoda třídění se používá k řazení proudu.

List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().sorted().collect(Collectors.toList());>

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

Níže je uvedeno několik terminálových operací:

1. sbírat()

Metoda shromažďování se používá k vrácení výsledku mezioperačních operací provedených na toku.

List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());>

2. forEach()

Metoda forEach se používá k iteraci přes každý prvek proudu.

List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));>

3. snížit()

Metoda redukce se používá k redukci prvků proudu na jednu hodnotu. Metoda snížení bere jako parametr BinaryOperator.

List number = Arrays.asList(2,3,4,5); int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);>

Zde je proměnné ans přiřazena 0 jako počáteční hodnota a je k ní přidáno i.

Poznámka: Intermediate Operations běží na základě konceptu Lazy Evaluation, který zajišťuje, že každá metoda vrátí pevnou hodnotu (terminální operace) před přechodem na další metodu.

algoritmus mergesort

Příklad Java Stream

Jáva




// Java program to demonstrate> // the use of stream in java> import> java.util.*;> import> java.util.stream.*;> class> Demo {> >public> static> void> main(String args[])> >{> >// create a list of integers> >List number = Arrays.asList(>2>,>3>,>4>,>5>);> >// demonstration of map method> >List square> >= number.stream()> >.map(x ->x * x)> >.collect(Collectors.toList());> >// create a list of String> >List names = Arrays.asList(> >'Reflection'>,>'Collection'>,>'Stream'>);> >// demonstration of filter method> >List result> >= names.stream()> >.filter(s ->s.startsWith(>'S'>))> >.collect(Collectors.toList());> > >System.out.println(result);> >// demonstration of sorted method> >List show> >= names.stream()> >.sorted()> >.collect(Collectors.toList());> > >System.out.println(show);> >// create a list of integers> >List numbers> >= Arrays.asList(>2>,>3>,>4>,>5>,>2>);> >// collect method returns a set> >Set squareSet> >= numbers.stream()> >.map(x ->x * x)> >.collect(Collectors.toSet());> > >System.out.println(squareSet);> >// demonstration of forEach method> >number.stream()> >.map(x ->x * x)> >.forEach(y ->System.out.println(y));> >// demonstration of reduce method> >int> even> >= number.stream()> >.filter(x ->x %>2> ==>0>)> >.reduce(>0>, (ans, i) ->ans + i);> >System.out.println(even);> >}> }>

>

>

Výstup

[4, 9, 16, 25] [Stream] [Collection, Reflection, Stream] [16, 4, 9, 25] 4 9 16 25 6>

Důležité body/pozorování Java Stream

  1. Proud se skládá ze zdroje, za kterým následuje nula nebo více mezilehlých metod kombinovaných dohromady (zřetězených) a koncové metody pro zpracování objektů získaných ze zdroje podle popsaných metod.
  2. Proud se používá k výpočtu prvků podle zřetězených metod bez změny původní hodnoty objektu.