Sobes.tech
Junior — Middle

Cum se diferențiază operațiile terminale și cele non-terminale în API-ul Stream în ceea ce privește funcțiile și scopul lor?

sobes.tech AI

Răspuns de la AI

În API-ul Stream, operațiile terminale și non-terminale diferă în scop și comportament:

  • Operații non-terminale (intermediate) — sunt operații care returnează un nou stream și permit construirea unui lanț de transformări. Sunt leneșe, adică nu se execută imediat, ci doar atunci când se apelează o operație terminală. Exemple: filter(), map(), sorted(), distinct().

  • Operații terminale (terminal) — încheie lanțul de operații și pornesc procesarea datelor. Returnează rezultatul (de exemplu, o colecție, un număr, void). După o operație terminală, stream-ul este considerat închis și nu poate fi reutilizat. Exemple: collect(), forEach(), reduce(), count().

Exemplu:

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))   // non-terminal
    .map(String::toUpperCase)           // non-terminal
    .collect(Collectors.toList());     // terminal

Aici, filtrarea și transformarea nu se execută imediat, ci doar când se apelează collect(), care inițiază procesarea și returnează lista finală.