Cuál es la diferencia entre
stream.map().limit(5).terminalOperation()
y esta línea
stream.limit(5).map().terminalOperation()
las dos líneas volverán el mismo resultado, pero cuál es más optimizado y no consumir más tiempo y recursos? y por qué ? y cuántas veces el mapa se llama en cada caso?
cuántas veces el mapa se llama en cada caso?
La respuesta depende del funcionamiento del terminal, no en el orden de map
y limit
.
La operación de terminal puede consumir sólo un elemento ( findFirst()
) o todos los elementos ( collect()
).
De cualquier manera, el funcionamiento del terminal dicta el número de elementos en los que map
se lleva a cabo, que debe ser idéntico en ambos casos.
Por ejemplo, si usted recoge los elementos a una List
, suponiendo que la Stream
fuente tiene al menos 5 elementos, map
se ejecutará 5 veces para cada tubería.
Puede comprobar que mediante la adición de una println
declaración a la map
etapa:
List<String> list = Arrays.asList ("a","b","c","d","e","f");
list.stream().map(l->{System.out.println ("map1 " + l);return l +"44";}).limit(5).collect(Collectors.toList());
list.stream().limit(5).map(l->{System.out.println ("map2 " + l);return l +"44";}).collect(Collectors.toList());
Esta es la salida:
map1 a
map1 b
map1 c
map1 d
map1 e
map2 a
map2 b
map2 c
map2 d
map2 e
De cualquier manera, map
no se ejecuta para el elemento sexto.
En cuanto a la variante a preferir, estoy suponiendo que tendrán tiempo de funcionamiento similar, pero eso depende de la implementación real.