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

2022-09-01 16:39: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


答案 1

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

因此,确切的等效项是:

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

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


答案 2

它:

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

甚至更简单:

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

推荐