Вы должны написать либо
personmitnamen4.forEach(System.out::println);
, который является ссылкой на метод.
или
personmitnamen4.forEach(p -> System.out.println(p));
, которое является лямбда-выражением.
То, что вы пытались передать forEach
:
p -> System.out::println
является лямбда-выражением, реализующим функциональный интерфейс с методом, который принимает Person
и возвращает ссылку на метод, совместимый с Consumer<Person>
, что делает лямбда-выражение совместимым с функциональным интерфейсом Function<Person,Consumer<Person>>
, который не является Consumer<Person>
требуется forEach
.
Вы можете проверить это, заметив, что следующее пройдет компиляцию:
Function<Person,Consumer<Person>> foo = p -> System.out::println;