Подтвердить что ты не робот

Что такое эквивалентное лямбда-выражение для 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?

4b9b3361

Ответ 1

Справочник метода System.out::println сначала оценит System.out, затем создаст эквивалент лямбда-выражения, который фиксирует оцениваемое значение. Обычно вы используете o->System.out.println(o) для достижения того же, что и ссылка на метод, но это lambda-выражение будет оценивать 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));