O IntelliJ IDEA recomendou-me agora mesmo substituir o seguinte loop for-each por uma chamada Java 8 "forEach":
for (Object o : objects) {
if (o instanceof SomeObject) {
doSomething();
}
}
A chamada recomendada seria assim:
objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());
A menos que eu esteja entendendo mal como funciona a funcionalidade subjacente do Stream, parece-me que o uso do stream é uma operação O (2n) em oposição a uma operação O (n) para o padrão para cada loop.
java
performance
java8
Mirrana
fonte
fonte
Respostas:
Os fluxos Java não repetem sua coleção uma vez para cada instrução, apesar do que a sintaxe implica. Aplica a cadeia inteira a cada elemento, um elemento de cada vez.
No seu caso, o fluxo operaria exatamente como o loop. Pegue um elemento, verifique seu predicado e aplique sua operação, depois passe para o próximo elemento.
fonte