Метод forEach принимает лямбда-выражение, которое возвращает значение. Почему я не получаю проблему компиляции для приведенного ниже кода? - PullRequest
2 голосов
/ 08 марта 2019
AtomicInteger value1 = new AtomicInteger(0);
IntStream.iterate(1, x -> 1).limit(100).parallel().forEach(y -> value1.incrementAndGet());

В приведенном выше коде forEach принимает лямбда-выражение, которое возвращает значение. Но forEach on stream принимает только Consumer, который не может вернуть никакого значения из его метода accept. Почему я не получаю ошибку компиляции для этого?

1 Ответ

2 голосов
/ 08 марта 2019

Почему я не получаю ошибку компиляции для этого?

Поскольку значение, возвращаемое методом, равно игнорируется , пока оно потреблено .

Вы также можете посмотреть на это так, как метод accept IntConsumer теперь будет выглядеть так:

new IntConsumer() {
    @Override
    public void accept(int y) {
        value1.incrementAndGet();
    }
});
...