Middle
Na čo sa v novej verzii Javy používajú streamy?
sobes.tech AI
Odpoveď od AI
Streamy v Jave 8+ sa používajú na deklaratívne spracovanie sekvencií dát. Umožňujú vykonávať funkcionálne operácie nad kolekciami (zoznamy, množiny), poľami alebo inými zdrojmi dát v potrubnom štýle.
Hlavné výhody používania streamov:
- Deklaratívny štýl: Umožňujú opísať "čo" je potrebné urobiť s dátami, nie "ako". To robí kód čitateľnejším a zrozumiteľnejším.
- Línie výpočtov: Operácie sa spracúvajú iba v prípade potreby, čo môže zvýšiť výkon, najmä pri práci s veľkými objemami dát.
- Paralelné spracovanie: Streamy sa ľahko paralelizujú (pri použití
parallelStream()), čo umožňuje efektívne využitie viacjadrových procesorov. - Zníženie množstva šablónového kódu: Nahrádzajú tradičné slučky a iterátory výraznejšími a kompaktnejšími konštrukciami.
- Imutabilita: Streamy nemenia pôvodný zdroj dát.
Príklady bežných operácií so streamami:
- Filtrovanie:
filter()- výber prvkov podľa podmienky. - Transformácia (mapovanie):
map()- transformácia každého prvku. - Zoradenie:
sorted()- zoradenie prvkov. - Unikátne prvky:
distinct()- odstránenie duplicit. - Zoskupovanie:
collect(Collectors.groupingBy(...))- zoskupovanie prvkov podľa kritéria. - Štatistika/Aggregácia:
count(),sum(),average(),max(),min(),reduce()- vykonávanie agregačných operácií. - Získanie do kolekcie:
collect(Collectors.toList()),collect(Collectors.toSet())- zber výsledkov do kolekcie.
Príklad použitia:
// Filtrovanie a transformácia zoznamu reťazcov pomocou streamu
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Vytvárame stream zo zoznamu
.filter(name -> name.startsWith("A")) // Filtrovanie: ponechávame len mená začínajúce na "A"
.map(String::toUpperCase) // Transformácia: každé meno na veľké písmená
.collect(Collectors.toList()); // Zber výsledku do nového zoznamu
System.out.println(filteredNames); // Výstup: [ALICE]