94

Während ich durch irgendeinen Code jagte, stieß ich auf den Pfeiloperator, was genau macht es? Ich dachte Java hätte keinen Pfeiloperator.Was macht der Pfeil-Operator '->' in Java?

return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) -> { 
     return Car.SEDAN == ((Car)arg0).getStyle(); 
}); 

Einzelheiten: Java 6, Apache Commons Sammlung, 12 IntelliJ

Update/Antwort: Es stellt sich heraus, dass IntelliJ 12 unterstützt Java 8, die Lambda-Ausdrücke unterstützt, und ist " Falten "Prädiziert und zeigt sie als Lambdas. Unten ist der "nicht gefaltete" Code.

return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() { 
    public boolean evaluate(Object arg0) { 
     return Car.SEDAN == ((Car)arg0).getStyle(); 
    } 
}); 
+3

Beachten Sie, dass die genaue Szenario ist IntelliJ den vorhandenen Code als Lambda-Ausdruck _rendering_ zu machen es ist einfacher zu lesen. Der tatsächliche Code ist kein Lambda-Ausdruck. –

Antwort

74

, den Teil der Syntax der neuen Lambda-Ausdrücke ist, um in Java 8. Es eingeführt werden soll, ein paar Online-Tutorials den Dreh raus zu bekommen, hier ist ein link zu eins. Grundsätzlich trennt die -> die Parameter (linke Seite) vom eigentlichen Ausdruck (rechte Seite).

+8

Das OP mit JDK 6, so ist dies wirklich nur IntelliJ Klappcode nach @antonm Antwort unter –

+1

@SeanLandsman OP könnte Java 6 verwenden, aber in der Frage, die er sagt, dass er an anderer Stelle auf diesen Code stieß. Warum IntelliJ keinen Fehler meldet, ist ein Rätsel (vielleicht ist dort eine Java 7-Version irgendwo im OP-System installiert). Aber das ist die Syntax eines Lambda-Ausdrucks in Java, keine Frage. –

9

Es ist ein Lambda-Ausdruck.

Dies bedeutet, dass arg0 aus der listOfCars eines der Elemente dieser Liste ist. Mit diesem Element wird er tun, daher die ->, was auch immer in den Klammern ist.

In diesem Beispiel ist er eine Liste von Autos zurück gehen, die den Zustand passen

Car.SEDAN == ((Car)arg0).getStyle(); 
26

Ich glaube, existiert dieser Pfeil wegen Ihrer IDE. IntelliJ IDEA macht so etwas mit etwas Code. Dies wird als Codefaltung bezeichnet. Sie können auf den Pfeil klicken, um ihn zu erweitern.

+0

das ist wahrscheinlicher. – irreputable

+9

Das ist falsch. Es ist ein Java 8 Lambda-Ausdruck. –

+23

@DavidConrad Nein, es ist nicht falsch. IntelliJ faltet Inline-Implementierungen funktionaler Schnittstellen tatsächlich so, dass sie wie Lambdas aussehen. – balpha

8

Dieses nützlich ist auch, wenn Sie eine Schnittstelle

Runnable r =()-> System.out.print("Run method"); 

implementieren möchten entspricht

Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       System.out.print("Run method"); 
      } 
     };