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]