为什么 Collection 和 Stream 上的 forEach 方法即使不是 Consumer 类型也能成功获取 Function.Identity?

why does forEach method on Collection and Stream take Function.Identity successfully even if it is not Consumer type?

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

IntUnaryOperator un = IntUnaryOperator.identity();

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

forEach方法只能以consumer为参数,那么如何用applyAsInt man方法编译成功which returns int?

谁能解释一下这背后的原因?

因为"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.[=15= 中被忽略]