Sobes.tech
Junior — Middle

Come si differenziano le operazioni terminali e non terminali nell'API Stream in termini di funzioni e scopo?

sobes.tech AI

Risposta dell'AI

Nell'API Stream, le operazioni terminali e non terminali si differenziano per scopo e comportamento:

  • Operazioni non terminali (intermediate) — sono operazioni che restituiscono un nuovo stream e consentono di costruire una catena di trasformazioni. Sono pigre, cioè non vengono eseguite immediatamente, ma solo quando viene chiamata un'operazione terminale. Esempi: filter(), map(), sorted(), distinct().

  • Operazioni terminali (terminal) — terminano la catena di operazioni e avviano l'elaborazione dei dati. Restituiscono un risultato (ad esempio, una collezione, un numero, void). Dopo un'operazione terminale, lo stream è considerato chiuso e non può essere riutilizzato. Esempi: collect(), forEach(), reduce(), count().

Esempio:

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

Qui, il filtraggio e la trasformazione non vengono eseguiti immediatamente, ma solo quando si chiama collect(), che avvia l'elaborazione e restituisce la lista finale.