我有以下代码...
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.
我的Person
类声明了一个toString
方法。
...我用不同的方式对人进行系统处理。但是最可取的方法是在日食中显示语法错误。在IntelliJ中,我没有得到这个。谁能解释或告诉我我在做什么错?
答案 0 :(得分:4)
您应该写
Post::whereHas('comments', function($q) {
$q->where('active', 1);
})->get()
这是方法参考。
或
personmitnamen4.forEach(System.out::println);
这是一个lambda表达式。
您试图传递给personmitnamen4.forEach(p -> System.out.println(p));
的内容:
forEach
是一个lambda表达式,该函数使用接受p -> System.out::println
并返回与Person
兼容的方法引用的方法来实现功能接口,这使lambda表达式与功能接口Consumer<Person>
兼容,而不是Function<Person,Consumer<Person>>
要求的Consumer<Person>
。
您可以通过观察以下内容通过编译来进行测试:
forEach
答案 1 :(得分:2)
您应该使用 lambda 或使用方法参考,而不能同时使用两者。
personmitnamen4.forEach(System.out::println); // method reference
personmitnamen4.forEach(p -> System.out.println(p)); // lambda