26

我偶然发现了以下使用方法引用的 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);
        }
    }
}

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

4

2 回答 2

54

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

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

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

如果有人在两者之间调用,这将有所不同System.setOut(…);

于 2015-01-19T13:27:06.977 回答
6

它的 :

numbers.forEach(i -> {System.out.println(i);});

甚至更简单:

numbers.forEach(i -> System.out.println(i));
于 2015-01-19T11:16:51.090 回答