IntelliJ IDEA me recomendó en este momento reemplazar el siguiente ciclo for-each con una llamada Java 8 "forEach":
for (Object o : objects) {
if (o instanceof SomeObject) {
doSomething();
}
}
La llamada recomendada quisiera así:
objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());
A menos que no entienda cómo funciona la funcionalidad subyacente de Stream, me parece que usar stream es una operación O (2n) en lugar de una operación O (n) para el bucle estándar de cada bucle.
8
¿Por qué crees que es O ^ 2? De hecho, los flujos se inventaron específicamente para (a) permitir una sintaxis más agradable y (b) no introducir una sobrecarga adicional. (De hecho, a menudo reducen los gastos generales mediante una evaluación perezosa.)
—
Kilian Foth
Basándome en la sintaxis, parece que primero está iterando para filtrar y luego iterando sobre los objetos filtrados por segunda vez para ejecutar mi código.
—
Mirrana
Incluso si lo hiciera, seguiría siendo O (2 * N), que es O (N), es decir, lineal y no cuadrático. Pero en realidad las iteraciones se entrelazan entre sí, y ambas pueden terminar antes si el resultado ya se conoce, esa es la belleza de las transmisiones. Definitivamente vale la pena pasar 15 minutos para leer las transmisiones en Java 8; como escribe Venkat Subramaniam, '' Las expresiones lambda son la droga de iniciación a Java 8, pero corrientes son la verdadera adicción. ''
—
Kilian Foth
Además: tu bucle es un antipatrón;)
—
Thomas Junk
@ThomasJunk ¿Puedes explicar cómo es un antipatrón? No estoy familiarizado con este.
—
Mirrana