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