Sobes.tech
Middle

Kam tiek izmantoti straumes jaunajā Java versijā?

sobes.tech AI

Atbilde no AI

Java 8+ straumes tiek izmantotas deklaratīvai datu secību apstrādei. Tās ļauj veikt funkcionālas operācijas kolekcijās (sarāmos, kopās), masīvos vai citos datu avotos straumes stilā.

Galvenās priekšrocības:

  • Deklaratīvs stils: Tās ļauj aprakstīt "ko" nepieciešams darīt ar datiem, nevis "kā". Tas padara kodu lasāmāku un saprotamāku.
  • Aizkavētas aprēķināšanas: Operācijas tiek veiktas tikai tad, kad tas ir nepieciešams, kas var uzlabot veiktspēju, īpaši strādājot ar lieliem datu apjomiem.
  • Paralēla apstrāde: Straumes viegli var paralēlizēt (parallelStream()), kas ļauj efektīvi izmantot daudzkodolu procesorus.
  • Šablonu koda samazināšana: Tie aizstāj tradicionālās cilpas un iterators ar izteiksmīgākām un kodu saīsinātākām konstrukcijām.
  • Neizmaināmība: Straumes nemaina sākotnējo datu avotu.

Populāras operācijas piemēri:

  • Filtrēšana: filter() - elementu atlase pēc nosacījuma.
  • Pārveidošana (mapi): map() - katra elementa pārveidošana.
  • Sakārtošana: sorted() - elementu sakārtošana.
  • Unikāli elementi: distinct() - dublikātu noņemšana.
  • Grupēšana: collect(Collectors.groupingBy(...)) - elementu grupēšana pēc pazīmes.
  • Statistika/Agregācija: count(), sum(), average(), max(), min(), reduce() - agregējošas operācijas.
  • Rezultātu savākšana kolekcijā: collect(Collectors.toList()), collect(Collectors.toSet()) - rezultātu savākšana.

Piemērs lietošanai:

// Saraksta virkņu filtra un pārveidošanas piemērs ar straumi
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

List<String> filteredNames = names.stream() // Straumes izveide no saraksta
                                   .filter(name -> name.startsWith("A")) // Filtrēšana: atlase tikai ar "A" sākotnējo vārdu
                                   .map(String::toUpperCase) // Pārveidošana: katrs vārds lielajiem burtiem
                                   .collect(Collectors.toList()); // Rezultāta savākšana jaunā sarakstā

System.out.println(filteredNames); // Izvade: [ALICE]