Sobes.tech
Middle

Na co se ve nové verzi Java používají streamy?

sobes.tech AI

Odpověď od AI

Streamy v Java 8+ jsou používány pro deklarativní zpracování sekvencí dat. Umožňují provádět funkcionální operace nad kolekcemi (seznamy, množiny), poli nebo jinými zdroji dat ve stylu potrubí.

Hlavní výhody používání streamů:

  • Deklarativní styl: Umožňují popsat "co" je třeba udělat s daty, nikoli "jak". To činí kód čitelnějším a srozumitelnějším.
  • Líné výpočty: Operace jsou zpracovávány pouze tehdy, když je to nutné, což může zvýšit výkon, zejména při práci s velkými objemy dat.
  • Paralelní zpracování: Streamy lze snadno paralelizovat (použitím parallelStream()), což umožňuje efektivně využívat vícejádrové procesory.
  • Snížení množství boilerplate kódu: Nahrazují tradiční smyčky a iterátory výstižnějšími a kompaktnějšími konstrukcemi.
  • Neměnnost: Streamy nemění původní zdroj dat.

Příklady běžných operací se streamy:

  • Filtrování: filter() - výběr prvků podle podmínky.
  • Transformace (mapování): map() - transformace každého prvku.
  • Řazení: sorted() - řazení prvků.
  • Unikátní prvky: distinct() - odstranění duplicit.
  • Skupinování: collect(Collectors.groupingBy(...)) - seskupování prvků podle znaku.
  • Statistiky/Aggregace: count(), sum(), average(), max(), min(), reduce() - provádění agregačních operací.
  • Sbírání do kolekce: collect(Collectors.toList()), collect(Collectors.toSet()) - sběr výsledků do kolekce.

Příklad použití:

// Filtrování a transformace seznamu řetězců pomocí streamů
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

List<String> filteredNames = names.stream() // Vytvoření streamu ze seznamu
                                   .filter(name -> name.startsWith("A")) // Filtrace: ponechává pouze jména začínající na "A"
                                   .map(String::toUpperCase) // Transformace: každé jméno na velká písmena
                                   .collect(Collectors.toList()); // Sběr výsledku do nové listy

System.out.println(filteredNames); // Výstup: [ALICE]