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.