Java 使用函数引用时出现奇怪的语法错误

Java 使用函数引用时出现奇怪的语法错误,java,eclipse,lambda,Java,Eclipse,Lambda,我有以下代码 List<Person> personenListe = Arrays.asList(new Person[] {person1, person2,person3,person4}); List<Person> personmitnamen4 = personenListe.stream().filter(p -> p.getName().equals("name4")).collect(Collectors.toList());

我有以下代码

List<Person> personenListe = Arrays.asList(new Person[] {person1, person2,person3,person4});

        List<Person> personmitnamen4 = personenListe.stream().filter(p -> p.getName().equals("name4")).collect(Collectors.toList());
        personmitnamen4.forEach(p -> System.out.println(p));
        personmitnamen4.forEach(new Consumer<Person>() {
            @Override
            public void accept(Person p) {
                // TODO Auto-generated method stub
                System.out.println(p);
            }
        });
        personmitnamen4.forEach(p -> System.out::println); // <- the target type of this expression must be a functional interface.
listpersoneliste=Arrays.asList(newperson[]{person1,person2,person3,person4});
List personmitnamen4=personeliste.stream().filter(p->p.getName().equals(“name4”).collect(Collectors.toList());
personmitnamen4.forEach(p->System.out.println(p));
personmitnamen4.forEach(新消费者(){
@凌驾
公共无效接受(p人){
//TODO自动生成的方法存根
系统输出println(p);
}
});

personmitnamen4.forEach(p->System.out::println);// 你也应该写

personmitnamen4.forEach(System.out::println);
这是一个方法参考

这是一个lambda表达式

您试图传递给forEach的内容:

p -> System.out::println
是一个lambda表达式,它使用一个方法实现一个函数接口,该方法接受
人员
,并返回一个与
消费者
兼容的方法引用,从而使lambda表达式与函数接口
函数
兼容,这不是
forEach
所需的
消费者

您可以通过观察以下内容是否可以通过编译来测试它:

Function<Person,Consumer<Person>> foo = p -> System.out::println;
函数foo=p->System.out::println;
您应该使用lambda或方法引用,而不是同时使用两者

personmitnamen4.forEach(System.out::println); // method reference

personmitnamen4.forEach(p -> System.out.println(p)); // lambda

好解释最后一句话为我打开了新的大门:-)谢谢。
personmitnamen4.forEach(System.out::println); // method reference

personmitnamen4.forEach(p -> System.out.println(p)); // lambda