Estrutura de processo: Muitas operações de stream retornam outra stream. Assim, é possível encadear operações para formar um processo mais abrangente. Isto, por sua vez, permite algumas otimizações, por exemplo mediante as noções de "preguiça" (laziness) e "corte de circuitos" (short-circuiting), que analisaremos mais a frente.
https://www.oracle.com/technetwork/pt/articles/java/processamento-streams-java-se-8-2763688-ptb.html
A questão versa sobre aspectos da linguagem de programação JAVA, versão 8.
Java é uma linguagem de programação baseada em classes e orientada a objetos. Foi desenvolvida inicialmente pela Sun Microsystems, qual foi posteriormente adquirida pela Oracle.
Em relação aos streams definidos no JAVA 8, podemos entendê-los como "uma sequência de elementos de uma fonte que suporta operações de agregação" (grifou-se) [1].
Sua criação trouxe uma alternativa ao uso da biblioteca Collections do JAVA, trazendo alguns benefícios, como, por exemplo, velocidade no processamento de grandes coleções.
Vamos então para análise das alternativas.
A) INCORRETA. Conforme Oracle [1], uma stream oferece uma interface para um conjunto de valores sequenciais de UM tipo de elemento PARTICULAR.
B) INCORRETA. Os dados consumidos pelos streams podem ser originados
de diversas fontes, como collections, arrays ou advindos de recursos E/S (Entrada e saída) [2]
C) INCORRETA. Na biblioteca Collections a iteração é externa (explícita), isto é, o programador precisa escrever a lógica de iteração, como uso de laços (foreach) [1].
Já na biblioteca Streams, a iteração é interna, a biblioteca abstrai a implementação da iteração e o programador só precisa fornecer uma função do que deve ser feito [1].
D) CORRETA. Conforme documentação do JAVA 8 [2], as operações de intermediárias dos Streams retornam um novo stream.
E) INCORRETA. A Streams API trabalha com princípios da programação funcional.
De acordo com Oracle [1]:
"A Streams API traz uma nova opção para a manipulação de coleções em Java
seguindo os princípios da programação funcional. Combinada com as
expressões lambda, ela proporciona uma forma diferente de lidar com
conjuntos de elementos, oferecendo ao desenvolvedor uma maneira simples e
concisa de escrever código que resulta em facilidade de manutenção e
paralelização sem efeitos indesejados em tempo de execução." (grifou-se)
Gabarito do professor: LETRA D.
REFERÊNCIAS: [1] Oracle. JAVA SE 8 - Documentation. Disponível em: documentação do JAVA SE 8 no site da Oracle. Acesso em: 12/8/2020; [2] Oracle. Processamento de dados com streams do Java SE 8 - Parte 1. Disponível em: artigo publicado no site oficial da Oracle. Acesso em: 12/8/2020
A Streams API traz uma nova opção para a manipulação de coleções em Java seguindo os princípios da programação funcional. Combinada com as expressões lambda, ela proporciona uma forma diferente de lidar com conjuntos de elementos, oferecendo ao desenvolvedor uma maneira simples e concisa de escrever código que resulta em facilidade de manutenção e paralelização sem efeitos indesejados em tempo de execução.
A proposta em torno da Streams API é fazer com que o desenvolvedor não se preocupe mais com a forma de se programar o comportamento, deixando a parte relacionada ao controle de fluxo e loop a cargo da API. É algo muito parecido com o que é feito com Threads, onde os aspectos mais complexos ficam encapsulados em APIs e as regras de negócio passam a ser a única responsabilidade do desenvolvedor.