Boa tarde!
Eu queria saber qual é a diferença entre usar produtos.stream.forEach() e diretamente produtos.forEach(). Poderiam me ajudar?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa tarde!
Eu queria saber qual é a diferença entre usar produtos.stream.forEach() e diretamente produtos.forEach(). Poderiam me ajudar?
Opa Fellipe, tudo certo?
Então uma vem da api de Streams e a outra faz parte da interface Iterable ambas foram adicionadas no java 8 e na real, elas possuem basicamente o mesmo comportamento, temos algumas diferenças sutis, que podemos analisar:
| .stream ().forEach () | .forEach() |
|---|---|
| .stream().forEach() também é usado para iterar a coleção, mas primeiro transforma a coleção para um Stream e depois itera sobre essa Stream. | .forEach () usa o iterador de coleções padrão. |
| Ao contrário do .forEach (), ele não executa em nenhuma ordem específica, ou seja, a ordem não é definida. | Executa sempre na ordem de iteração, se houver uma especificada. |
| Durante a modificação da estrutura na coleção, a exceção será lançada posteriormente. | Se realizarmos qualquer modificação estrutural na coleção usando o .forEach (), sera lançada imediatamente uma exceção. |
| Se a iteração estiver acontecendo na coleção sincronizada, ela não bloqueará a coleção. | Se a iteração estiver acontecendo na coleção sincronizada, ela bloqueará a coleção e a manterá em todas as chamadas. |
Na maioria dos casos, isso acaba não fazendo tanta diferença no dia a dia, mas é sempre bom buscar entender a diferença real, muito boa pergunta Fellipe.
Qualquer duvida pode mandar, espero ter conseguido esclarecer um pouco :)
Muito obrigado pela explicação, Gabriel. Ajudou demais e explicou muito bem!