Como as operações terminais e não terminais diferem na API Stream em termos de suas funções e propósitos?
sobes.tech IA
Resposta da IA
Na API de Stream, as operações terminais e não terminais diferem na sua finalidade e comportamento:
-
Operações não terminais (intermediate) — são operações que retornam um novo stream e permitem construir uma cadeia de transformações. São preguiçosas, ou seja, não são executadas imediatamente, apenas quando uma operação terminal é chamada. Exemplos:
filter(),map(),sorted(),distinct(). -
Operações terminais (terminal) — encerram a cadeia de operações e iniciam o processamento dos dados. Retornam um resultado (por exemplo, uma coleção, um número, void). Após uma operação terminal, o stream é considerado fechado e não pode ser reutilizado. Exemplos:
collect(),forEach(),reduce(),count().
Exemplo:
List<String> result = list.stream()
.filter(s -> s.startsWith("A")) // não terminal
.map(String::toUpperCase) // não terminal
.collect(Collectors.toList()); // terminal
Aqui, a filtragem e a transformação não são executadas imediatamente, mas apenas quando collect() é chamado, que inicia o processamento e retorna a lista final.