System.out::println 的等效 lambda 表达式是什么
What is the equivalent lambda expression for System.out::println
我偶然发现了以下 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 表达式是什么?
是:
numbers.forEach(i -> {System.out.println(i);});
或更简单:
numbers.forEach(i -> System.out.println(i));
方法引用 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
的方法参考:
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 表达式是什么?
是:
numbers.forEach(i -> {System.out.println(i);});
或更简单:
numbers.forEach(i -> System.out.println(i));
方法引用 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(…);
,这将有所不同。