Lo que está mal en mi acercamiento para crear una lista de números enteros utilizando IntStream y forEach?

Koray brigada:

El código ingenua que tengo es:

class ${
    public static void main(String[] _) {
        final List<Integer> ints = new ArrayList<>();
        IntStream.iterate(0, i -> i++).limit(5).forEach(val -> ints.add(val));
        System.out.println(ints);
    }
}

donde mi expectativa era ver lo siguiente en la consola:

[0, 1, 2, 3, 4]

Pero el real es:

[0, 0, 0, 0, 0]

Probablemente es algo muy simple, pero lo que me estoy perdiendo?

escamillas

Es necesario devolver el valor incrementado. Usted Postfix incrementa una variable local y devuelve el valor no incrementa. utilizar ++inoi++

final List<Integer> ints = new ArrayList<>();
IntStream.iterate(0, i -> ++i).limit(5).forEach(val -> ints.add(val));
System.out.println(ints);

Editar el post de John Ver Kugelman sobre el uso de las operaciones no mutantes cuando se programa con un estilo funcional. Usando i + 1creará una nueva primitiva y no mutar la variable de parámetros.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=136997&siteId=1
Recomendado
Clasificación