[英]strange syntax error using function reference
我有以下代碼...
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中,我沒有得到這個。 誰能解釋或告訴我我在做什么錯?
你應該寫
personmitnamen4.forEach(System.out::println);
這是方法參考。
要么
personmitnamen4.forEach(p -> System.out.println(p));
這是一個lambda表達式。
您試圖傳遞給forEach
:
p -> System.out::println
是一個lambda表達式,其實現方法接口的方法是接受Person
並返回與Consumer<Person>
兼容的方法引用,這使lambda表達式與功能接口Function<Person,Consumer<Person>>
兼容, forEach
要求的Consumer<Person>
。
您可以通過觀察以下內容可以通過編譯來對其進行測試:
Function<Person,Consumer<Person>> foo = p -> System.out::println;
您應該使用lambda或使用方法reference ,不要同時使用兩者。
personmitnamen4.forEach(System.out::println); // method reference
personmitnamen4.forEach(p -> System.out.println(p)); // lambda
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.