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

标签 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());
        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.

enter image description here

我的 Person 类声明了一个 toString 方法。

...我以不同的方式对人进行系统分析。但最好的方法是在 Eclipse 中显示语法错误。在 IntelliJ 中我不明白这一点。谁能解释或告诉我我在这里做错了什么?

最佳答案

你应该写其中之一

personmitnamen4.forEach(System.out::println);

这是一个方法引用。

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

这是一个 lambda 表达式。

您尝试传递给 forEach 的内容:

p -> System.out::println

是一个 lambda 表达式,它使用接受 Person 的方法来实现函数接口(interface)。并返回与 Consumer<Person> 兼容的方法引用,这使得 lambda 表达式与函数接口(interface) Function<Person,Consumer<Person>> 兼容。 ,这不是 Consumer<Person> forEach 要求.

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

Function<Person,Consumer<Person>> foo = p -> System.out::println;

关于java - 使用函数引用时出现奇怪的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274931/

相关文章:

java - 调试时打开嵌入式 Derby DB

java - 运行 autosys 批处理作业并在 java 中检查其状态

java - Tomcat 8.0.32 - 更新了网络应用程序未使用的共享库

eclipse - 在 org.apache.hadoop.examples.WordCount.main(WordCount.java :84)

eclipse - Eclipse 中的数据流 : Cannot run program "gcloud"

python - pandas 应用具有多个条件的函数?

java - 如何对 aws lambda 调用进行单元测试?

java - @JsonTypeName 不起作用并在尝试解析子类型时返回 Missing type id

eclipse : Importing Existing Projects into workspace

java - 对列表中的对象进行分组 java 8