El cierre de captura Lambda con Integer en flujo infinito arroja un error de OutOfMemoryError.
El código debajo lanza el error java.lang.OutOfMemoryError al 100%.
Set
new Random().ints(10_000_000,
Integer.MIN_VALUE,
Integer.MAX_VALUE)
.forEach(
v -> {
if(set.contains(v)){
System.out.println(v);
}else{
set.add(v);
}
}
);
Según tengo entendido, ¿es porque la lambda captura el Integer con contexto? ¿Alguien podría explicar qué sucede exactamente aquí?
davy.ai
Este código lanzará un java.lang.OutOfMemoryError porque el set está intentando almacenar 10 millones de enteros, lo que es demasiado para que la memoria lo maneje. La captura lambda no es la causa del error, sino el gran número de enteros que se están almacenando en el set.