2
respostas

Qual tem mais performance: Loop clássico ou Stream.forEach()

Já vi artigos que dizem que o clássico for-loop é mais rápido que o stream.forEach() - ver link em [1].

Por outro lado, já vi artigos que dizem ao contrário: que o Stream.forEach() é mais performático. - ver link em [2].

Afinal, qual é mais performático? o loop-clássico ou Stream.forEach()?

[1] https://jaxenter.com/java-performance-tutorial-how-fast-are-the-java-8-streams-118830.html

[2] https://content.sciendo.com/configurable/contentpage/journals$002fjamsi$002f14$002f1$002farticle-p103.xml

2 respostas

Fala, Bruno! Tudo bem contigo?

Desculpe a demora em dar um retorno

Essa questão eu não diria que seria um caso de "performance", mas de situações em que deve ser usado um ou outro.

O loop for-each fornece vantagens atraentes sobre o loop for tradicional em clareza e prevenção de erros, sem perda de desempenho. Você deve usá-lo onde puder, mas infelizmente tem três situações comuns em que não é possível usar um loop for-each:

  • 1 - Filtragem: Se você precisar percorrer uma coleção e remover elementos selecionados, terá que usar um iterador explícito para poder chamar seu método remove.
  • 2 - Transformação: Se você tiver que percorrer uma lista ou matriz e substituir alguns ou todos os valores de seus elementos, precisará do iterador de lista ou do índice de matriz para definir o valor de um elemento.
  • 3 - Iteração paralela: Se você tiver que percorrer várias coleções em paralelo, precisará de controle explícito sobre a variável de iterador ou de índice, para que todas as variáveis de iterador ou de índice possam ser avançadas de maneira cadenciada.

Se perceber que está em uma dessas situações, use um loop for comum.

Esse é um assunto para uma boa roda de conversa, Bruno!

Valeu pela dúvida! Foi boa!

Espero ter ajudado!

Um abraço e bons estudos

Estava com a mesma dúvida, ótima explicação Cássio.