2017-01-14 4 views
1

Ich versuche, mich mit Java 8-Konzepten zu beschäftigen. Im Zusammenhang mit Methodenreferenzen würde ich gerne wissen, wie die Stream-Filter-Methode, die ein "Prädikat-Prädikat" -Objekt in meinem Fall akzeptiert, auch eine statische Methode in derselben Klasse akzeptieren kann. Beispiel unten.Statische Methodenreferenzen Java 8

public class App 
{ 
    public static void main(String[] args) 
    { 
     List<Integer> intList = Arrays.asList(1,2,3,4,5); 
     intList.stream().filter(e -> e > 3).forEach(System.out::println); 

     intList.stream().filter(App::filterNosGrt3).forEach(System.out::println); 

    } 


    public static boolean filterNosGrt3(Integer no) 
    { 
     if(no>3) 
      return true; 
     else 
      return false; 
    } 
} 

Was mich verwirrt, ist im Gegensatz zu den Lambda, die ein Objekt in sich selbst ist, die statische Methode kein Objekt hat daran befestigt. Wie also erfüllt es die Filtermethode hier?

Dank

+1

Schreiben Sie nicht 'if (no> 3) return true; else return false; 'Einfach schreiben' return no> 3; '... – Holger

Antwort

1

Wenn Sie

intList.stream().filter(App::filterNosGrt3).forEach(System.out::println); 

Sie effektiv zu schreiben schreiben:

intList.stream().filter(e -> App.filterNosGrt3(e)).forEach(System.out::println); 

Es ist nur ein Merkmal der Methode Referenzen. Von der Java method references tutorial:

Sie verwenden Lambda-Ausdrücke, um anonyme Methoden zu erstellen. Manchmal verwendet ein Lambda-Ausdruck jedoch nur eine vorhandene Methode. In diesen Fällen ist es oft übersichtlicher, nach Namen auf die bestehende Methode zu verweisen. Methodenreferenzen ermöglichen Ihnen dies; Sie sind kompakte, leicht zu lesende Lambda-Ausdrücke für Methoden, die bereits einen Namen haben.

...

Verfahren Referenz Person::compareByAge ist semantisch dieselbe wie die Lambda-Ausdruck (a, b) -> Person.compareByAge(a, b). Jedes Zimmer verfügt über die folgenden Eigenschaften:

  • Seine formale Parameterliste von Comparator<Person>.compare kopiert wird, die (Person, Person) ist.
  • Sein Körper nennt die Methode Person.compareByAge.
Verwandte Themen