web-dev-qa-db-fra.com

Que fait l'opérateur de flèche '->' en Java?

En cherchant dans un code, je suis tombé sur l'opérateur de flèche, que fait-il exactement? Je pensais que Java n'avait pas d'opérateur de flèche.

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

Détails: Java 6, Apache Commons Collection, IntelliJ 12

Mise à jour/Réponse: Il se trouve qu'IntelliJ 12 supporte Java 8, qui supporte lambdas, et "replie" les prédicats et les affiche sous la forme lambdas. Ci-dessous se trouve le code "non plié".

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

Cela fait partie de la syntaxe des nouvelles expressions lambda, à introduire dans Java 8. Il existe quelques tutoriels en ligne pour vous aider à comprendre, voici un lien à un . Fondamentalement, le -> sépare les paramètres (à gauche) de l'expression réelle (à droite).

106
Óscar López

Je crois que cette flèche existe à cause de votre IDE. IntelliJ IDEA fait une chose pareille avec du code. Ceci s'appelle le pliage de code. Vous pouvez cliquer sur la flèche pour l'agrandir.

30
Anton-M

Celui-ci est également utile lorsque vous souhaitez implémenter une interface.

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

est équivalent à

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

C'est une expression lambda.

Cela signifie que, dans listOfCars, arg0 est l'un des éléments de cette liste. Avec ce point, il va faire, d’où le ->, tout ce qui est à l’intérieur des crochets.

Dans cet exemple, il va retourner une liste de voitures qui correspondent à la condition

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

Nouvel opérateur pour l'expression lambda ajoutée à Java 8

L’expression Lambda est le moyen court d’écriture de méthode.
Il est indirectement utilisé pour implémenter interface fonctionnelle

Syntaxe primaire: (paramètres) -> {instructions; }

Il y a quelques règles de base règles pour l’écriture efficace des expressions lambda que vous devriez connaître.

0
Manasi