Middle
Kokiais tikslais naudojami srautai naujoje Java versijoje?
sobes.tech AI
Atsakymas iš AI
Java 8+ srautai naudojami deklaratyviam duomenų sekų apdorojimui. Jie leidžia atlikti funkcines operacijas kolekcijose (sąrašuose, rinkiniuose), masyvuose ar kituose duomenų šaltiniuose srauto stiliumi.
Pagrindiniai pranašumai:
- Deklaratyvus stilius: Jie leidžia aprašyti "ką" reikia padaryti su duomenimis, o ne "kaip". Tai daro kodą skaitomesnį ir suprantamesnį.
- Vėlyvosios skaičiavimai: Operacijos vykdomos tik tada, kai jų reikia, kas gali pagerinti našumą, ypač dirbant su dideliais duomenų kiekiais.
- Lygiagretus apdorojimas: Srautai lengvai gali būti lygiagretinami (
parallelStream()), kas leidžia efektyviai naudoti daug branduolių procesorius. - Šabloninio kodo sumažinimas: Jie pakeičia tradicinius ciklus ir iteratorių išraiškingesnėmis ir kompaktiškesnėmis konstrukcijomis.
- Nepriklausomumas: Srautai nekeičia pradinio duomenų šaltinio.
Pavyzdžiai dažniausiai naudojamų operacijų:
- Filtravimas:
filter()- elementų atranka pagal sąlygą. - Transformavimas (mapavimas):
map()- kiekvieno elemento transformavimas. - Rūšiavimas:
sorted()- elementų rūšiavimas. - Unikalūs elementai:
distinct()- pasikartojimų pašalinimas. - Grupavimas:
collect(Collectors.groupingBy(...))- elementų grupavimas pagal požymį. - Statistika/Aggregacija:
count(),sum(),average(),max(),min(),reduce()- agreguojančios operacijos. - Rezultatų surinkimas į kolekciją:
collect(Collectors.toList()),collect(Collectors.toSet())- rezultatų surinkimas.
Pavyzdys naudojimo:
// Sąrašo eilučių filtravimas ir transformavimas naudojant srautą
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Sukuriame srautą iš sąrašo
.filter(name -> name.startsWith("A")) // Filtruojame: paliekame tik vardus, prasidedančius "A"
.map(String::toUpperCase) // Transformuojame: kiekvieną vardą į didžiąsias raides
.collect(Collectors.toList()); // Surenkame rezultatą į naują sąrašą
System.out.println(filteredNames); // Išvestis: [ALICE]