Почему метод forEach в Collection и Stream успешно принимает Function.Identity, даже если это не тип Consumer?

IntStream is = IntStream.of(1,2,3);

IntUnaryOperator un = IntUnaryOperator.identity();

is.forEach(s -> un.applyAsInt(s));

Метод forEach может принимать только потребителя в качестве аргумента, тогда как он успешно компилируется с методом метода applyAsInt, который возвращает int?

Кто-нибудь может пожалуйста объяснить причину этого?

2 ответа

Решение

Потому что "s -> un.applyAsInt(s)" является потребителем

Код в вопросе

is.forEach(s -> un.applyAsInt(s));

также может быть представлен как:

is.forEach(new IntConsumer() {
    @Override
    public void accept(int s) {
        un.applyAsInt(s);  // return type ignored
    }
});

который может помочь вам понять, что, несмотря на applyAsInt возврате intвозвращаемое значение игнорируется в течениеforEach,

Другие вопросы по тегам