JDK8--03: syntaxe d'expression lambda

Pour la grammaire de base des expressions lambda, on est de comprendre les expressions lambda grammaire de base, et l'autre est la nécessité de comprendre l'interface de fonction

A, des expressions lambda décrivant la grammaire de base

  java8 introduit nouvel opérateur ->, peut être appelé opérateur lambda ou l'opérateur de flèche, l'opérateur sera divisé en deux parties expression lambda.

  Gauche: liste des paramètres

  A droite: les expressions de code à exécuter, qui est le corps lambda

  lambda format général sont les suivantes:

  La première: aucun paramètre et ne renvoie aucune valeur

  La seconde: Il y a des paramètres, aucune valeur de retour

    Variante 1: l'argument de type peut être omis

    Variante 2: Il y a un paramètre, le paramètre peut être omis entre parenthèses

  Troisièmement: Il y a des paramètres, la valeur de retour

    Variantes: déclaration lambda corps d'exécution est une seule, peut être omis et le retour des accolades corps lambda

Deux, expressions lambda échantillon

  1, une expression, aucun paramètre et ne renvoie aucune valeur

/ * * 
     * Lambda表达式一
     * / 
    publics  vides test1 () {
         // jdk1.7之前 
        Runnable runnable = nouvelle Runnable () { 
            @Override 
            publique  vide run () { 
                système. out .print ( " bonjour RUNNABLE " ); 
            } 
        }; 
        runnable.run (); 

        Système. sur .println ( " ============================= " ); 

        // 使用lambda表达式 
        Runnable runnable1 = () -> Système. en dehors.println ( " bonjour lambda " ); 
        runnable1.run (); 
    }

  2, deux expressions: Là paramètres et renvoie aucune valeur

publique  vide test2 () { 
        Comparator <Entier> = comparateur (entier x, entier y) -> Integer.compare (x, y); 
    }

    Variante 1: le type de paramètre peut être omis (c'est parce que le compilateur jvm peut être déduit du contexte du type à la compilation, pour en déduire le type de sortir l'argument, d'autres ici et ne doivent pas être omis sont omis, et certains paramètres ne peut être omis, il paramètre n'est pas omis)

publique  vide test3 () { 
        Comparator <Entier> comparateur = (x, y) -> Integer.compare (x, y); 
    }

    Variante 2: Il y a un paramètre, le paramètre peut être omis entre parenthèses

    publique  vide test4 () { 
        consommateur <String> consommateur = x -> Système. sur .println (x); 
        consumer.accept ( " bonjour " ); 
    }

  Troisièmement: Il y a des paramètres, la valeur de retour

    publique  vide test5 () { 
        Comparator <Entier> = comparateur (entier x, entier y) -> { 
            log.info ( " bonjour test5 " );
            retour Integer.compare (x, y); 
        }; 
    }

    Variantes: corps lambda pour effectuer une seule déclaration, vous pouvez revenir et accolades corps lambda omis (en fait, cela a déjà été démontré, une sorte de la deuxième variante)

publique  vide test3 () { 
        Comparator <Entier> comparateur = (x, y) -> Integer.compare (x, y); 
    }

Résumé:

  Dans le cas d'une province entre parenthèses gauche et droite

  À gauche de l'inférence de type province

En troisième lieu, la fonction d'interface

  expression lambda doit prendre en charge l'interface fonctionnelle, une interface de fonctions d'interface qui est seulement une mise en œuvre. Les annotations peuvent être utilisées pour tester @FunctionalInterface

En quatrième lieu, la fonction d'interface échantillon (java8 fournit quatre fonctions de l'interface de base, suivi va être décrit)

  Créer une interface de fonction

emballer com.example.jdk8demo.lambda; 

@FunctionalInterface 
publique  Interface MyInterface { 
    Entier getInteger (entier i); 
}

  Les nouveaux appels de méthode d'interface de fonction

    publique entier getInteger (entier i, MyInterface mi) {
         retour mi.getInteger (i); 
    }

  La dernière étape consiste à utiliser des expressions lambda logiques de mise en œuvre spécifique

    publique  vide test6 () {
         // obtenir 10 carrés 
        log.info ( " ============ " + getInteger ( 10 , (X) -> X * X)); 
    }

 

Je suppose que tu aimes

Origine www.cnblogs.com/liconglong/p/12452913.html
conseillé
Classement