it-swarm.com.de

Was macht der Pfeiloperator '->' in Java?

Beim Durchsuchen von Code bin ich auf den Pfeiloperator gestoßen. Was genau macht er? Ich dachte, Java hatte keinen Pfeiloperator.

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

Details: Java 6, Apache Commons Collection, IntelliJ 12

pdate/Answer: Es stellt sich heraus, dass IntelliJ 12 Java 8, das Lambdas unterstützt und Prädikate und "faltet" Anzeigen als Lambdas. Unten ist der "ungefaltete" Code.

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

Das ist ein Teil der Syntax der neuen Lambda-Ausdrücke, die in Java 8 eingeführt werden. Es gibt ein paar Online-Tutorials, um den Überblick zu behalten. Hier ist ein Link = Eins. Grundsätzlich ist die -> trennt die Parameter (links) vom eigentlichen Ausdruck (rechts).

106
Óscar López

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

30
Anton-M

Dies ist auch nützlich, wenn Sie eine Schnittstelle implementieren möchten

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

ist äquivalent zu

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

Es ist ein Lambda-Ausdruck.

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

In diesem Beispiel gibt er eine Liste der Autos zurück, die der Bedingung entsprechen

Car.SEDAN == ((Car)arg0).getStyle();
12
simple-thomas

Neuer Operator für Lambda-Ausdruck hinzugefügt in Java 8

Lambda-Ausdruck ist die kurze Methode zum Schreiben von Methoden.
Es wird indirekt verwendet, um funktionale Schnittstelle zu implementieren

Primärsyntax: (Parameter) -> {Anweisungen; }

Es gibt einige grundlegende Regeln für effektives Schreiben von Lambda-Ausdrücken die Sie kennen sollten.

0
Manasi