Sobes.tech
Junior — Middle

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.