簡體   English   中英

使用函數參考的奇怪語法錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM