Sobes.tech
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]