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

标签 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方法编译成功?

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

最佳答案

有问题的代码

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

也可以表示为:

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

这可以帮助您理解,尽管 applyAsInt 返回 intforEach 中返回的值会被忽略

关于lambda - 为什么 Collection 和 Stream 上的 forEach 方法即使不是 Consumer 类型也能成功获取 Function.Identity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54784630/

相关文章:

wpf - 错误无法在订阅 IObservable<Point> 时转换 lambda 表达式

c# - 我可以在 C# winforms 中使用 foreach 循环评估两组项目吗?

java - hibernate-java8 依赖项无助于正确保存日期

java - 手动链接 GroupBy 收集器

java - 使用 Java 8 NIO,如何在跳过第一行或标题记录的同时读取文件?

spring - 了解实例变量名称和使用 Spring @Bean 注解创建它的方法

c++ - std::future 如何影响关联的 std::packaged_task 的生命周期?

lambda - TypeScript 和 Knockout 绑定(bind)到 'this' 问题 - 需要 lambda 函数吗?

vb.net - vb.net 中的 List.ForEach - 让我困惑

perl - 在 foreach 循环中死亡时未按良好顺序执行的行