java - System.out::println 的等效 lambda 表达式是什么

标签 java lambda java-8 method-reference

我偶然发现了以下 Java 代码,它使用了 System.out.println 的方法引用:

class SomeClass {
    public static void main(String[] args) {
           List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);
           numbers.forEach(System.out::println);
        }
    }
}

System.out::println 的等效 lambda 表达式是什么?

最佳答案

方法引用 System.out::println 将首先评估 System.out,然后创建一个 lambda 表达式的等价物,捕获评估值。通常,您会使用
o -> System.out.println(o) 来实现与方法引用相同的效果,但此 lambda 表达式将评估 System.out 每次都会调用该方法。

所以一个确切的等价物是:

PrintStream p = Objects.requireNonNull(System.out);
numbers.forEach(o -> p.println(o));

如果有人在中间调用 System.setOut(...);,这将产生影响。

关于java - System.out::println 的等效 lambda 表达式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28023364/

相关文章:

java - 如何计算按Java8流中的属性分组的对象中的多个总和?

java - 找不到 bean 定义,我也应该注释一个接口(interface)吗?

java - Maven 找不到 Struts2 依赖项

java - 在 Android 中解析 JSON 时出现 OutOfMemoryError

java - 在java 8中使用流迭代列表

java - Java 8 中查询结果数据库的最优化方式

java - 如何使 `Map::get` 返回找到的值的 `Optional` 或 `Optional.empty()`

java - 从jsp页面中的java片段访问xml表单变量的最简单方法?

typescript - 我可以从 Lambda 层导入 typescript 类型吗?

move 操作后 C++ lambda ‘this’ 指针失效