Boa tarde!
Eu queria saber qual é a diferença entre usar produtos.stream.forEach() e diretamente produtos.forEach(). Poderiam me ajudar?
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!