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

时间:2019-02-20 10:55:31

标签: lambda foreach java-8 java-stream unary-operator

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

IntUnaryOperator un = IntUnaryOperator.identity();

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

forEach方法只能将consumer作为参数,然后如何使用返回int的applyAsInt man方法成功编译?

任何人都可以解释其背后的原因吗?

2 个答案:

答案 0 :(得分:2)

相关代码

play = () => {
if (this.audio === null) {
  this.audio = new Audio(music);
}
this.audio.loop = true; //this one
this.setState({ play: true, pause: false });
this.audio.play();
};

也可以表示为:

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

这可以帮助您理解,尽管is.forEach(new IntConsumer() { @Override public void accept(int s) { un.applyAsInt(s); // return type ignored } }); 返回了applyAsInt,但返回的值在int内被忽略了。

答案 1 :(得分:1)

因为“ s-> un.applyAsInt(s)”是使用者