Introduction rapide à Java 8 Lambdas
Si vous êtes un programmeur Java et que vous souhaitez en savoir plus sur les lambdas Java 8, nous allons dans cet article examiner de plus près la syntaxe et l'utilisation de lambda..
UNE expression lambda en Java est un moyen concis d’exprimer une méthode d’une classe dans une expression. Il a une liste de paramètres et un corps. Le corps peut être une expression unique ou un bloc. 10 Concepts de base en Java à apprendre lors de la mise en route 10 Concepts de base en Java à apprendre lors de la mise en route Que vous écriviez une interface graphique, développiez un logiciel côté serveur ou une application mobile utilisant Android, apprendre Java vous sera utile. Voici quelques concepts Java de base pour vous aider à démarrer. Lire la suite . Il est couramment utilisé lorsqu'une implémentation d'une interface est requise. Ce besoin survient généralement lorsqu'une interface est requise en tant qu'argument pour appeler une méthode..
Quelques expressions lambda simples
Voyons quelques exemples simples d'expressions lambda.
Ce qui suit est une expression lambda qui accepte deux nombres X et y et calcule la somme.
(int x, int y) -> x + y;
Supprimez les types de paramètres pour une représentation plus concise:
(x, y) -> x + y;
Définissez une fonction qui n'accepte aucun paramètre:
() -> 404;
Ce qui suit est également valide, ce qui n'accepte aucun paramètre et ne renvoie rien:
() ->
Pas besoin de parenthèses englobant des paramètres pour un seul paramètre:
x -> x + 1
Des blocs de code plus complexes sont également possibles. Le lambda suivant accepte un seul ligne paramètre et fait un peu de traitement sur elle. Notez que le type du paramètre est déduit du contexte environnant:
ligne -> String [] x = pattern.split (ligne); renvoie le nouveau lecteur (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));
Codage propre et concis
L'utilisation d'expressions lambda permet de rendre votre code propre et concis. Pour ce faire, les classes Java 8 font largement appel à lambdas..
Boucle sur une liste ou un ensemble
Classes de collection telles que liste, Ensemble, Queue, et tels mettre en œuvre la Iterable interface facilitant la lecture en boucle des éléments.
Déclarer une liste de noms.
liste names = Arrays.asList ("Joe", "Jack", "James", "Albert");
Boucle sur la liste sans lambda:
for (Nom de chaîne: noms) System.out.println (nom);
En utilisant lambda, la boucle ci-dessus peut être écrite ainsi:
names.forEach (name -> System.out.println (name));
Avec les références de méthodes Java 8, ce qui précède peut être écrit de manière encore plus concise:
names.forEach (System.out :: println);
Boucle sur une carte
UNE Carte est un mappage des clés aux valeurs. Boucler sur une carte implique de boucler sur chaque carte (clé, valeur). Comparez comment vous pouvez utiliser lambdas pour cette situtation.
Définissez d'abord une carte:
Carte map = new HashMap <> (); map.put ("Atlanta, Géorgie", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98);
Vous pouvez faire une boucle sur cette carte de manière traditionnelle:
pour (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());
Voici comment vous pouvez faire la même chose de manière rapide et concise en utilisant lambdas:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Interfaces fonctionnelles
Quel est le type de retour d'une expression lambda? En d’autres termes, quel est le type de X dans la déclaration suivante?
X x = a -> a + 1;
Le type de retour d'une expression lambda est un interface fonctionnelle - une interface avec une seule méthode abstraite. Vous pouvez affecter une expression lambda à une interface avec une méthode abstraite compatible. Quelques exemples ci-dessous.
Création d'une tâche à plusieurs threads
Envisagez de créer une tâche à exécuter dans un thread séparé. 4 Méthodes d'écriture de code multithread en Java 4 Méthodes d'écriture de code multithread en Java Dans cet article, nous comparons quelques options pour l'écriture de code multithreadé en Java. vous pourrez mieux juger quelle option utiliser pour votre prochain projet Java. En savoir plus - vous devez définir la tâche en tant que Runnable interface et mettre en œuvre le courir() méthode. Ici Runnable est une interface fonctionnelle.
class MyTask implémente Runnable … public void run () // implémente votre tâche ici System.out.println ("En cours d'exécution dans un thread séparé maintenant."); …
Vous pouvez ensuite créer une instance du Ma tâche classe et l'utiliser pour démarrer un nouveau thread d'exécution.
MyTask task = new MyTask (); Fil de discussion = nouveau thread (tâche); thread.start ();
En utilisant un lambda, le processus de création d’un Runnable devient beaucoup plus facile. La définition de tâche ci-dessus peut être réécrite comme suit:
Runnable task = () -> System.out.println ("Exécution dans un thread séparé maintenant.");
Ou même:
Thread thread = new Thread (() -> System.out.println ("En cours d'exécution dans un thread séparé maintenant.")); thread.start ();
Comparaison à l'aide d'un comparateur
le Comparateur est une interface fonctionnelle permettant de comparer des objets d'un type donné. Il définit une méthode abstraite unique appelée comparer() qui peut être défini en utilisant une expression lambda.
Voici une expression lambda créant un Comparateur utilisé pour comparer les chaînes sans tenir compte de la casse.
Comparateur cmp = (x, y) -> x.compareToIgnoreCase (y);
Une fois une instance de la Comparateur l'interface fonctionnelle a été créée, elle peut être réutilisée à la demande.
Ici, nous trions une liste de chaînes par ordre croissant.
liste names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (noms, cmp); names.forEach (System.out :: println); // imprime Albert Jack James Joe
La liste ci-dessus est triée sur place. Nous pouvons maintenant le rechercher en utilisant le recherche binaire() méthode comme suit:
System.out.println ("search (Joe):" + Collections.binarySearch (noms, "Joe", cmp)); # recherche d’impressions (Joe): 3
Calculer le maximum et le minimum à partir d'une liste est également facile avec lambdas.
Définir des données:
liste temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Utilisez une expression lambda pour définir le comparateur:
Comparateur cmpTemp = (x, y) -> Integer.compare (x, y);
Et imprimez le maximum et le minimum:
System.out.println ("------ Max / Min ------"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Utilisation dans la programmation graphique
Les expressions Lambda sont également extrêmement utiles dans la programmation d'interface graphique pour implémenter des gestionnaires d'événements. Voici un exemple d'utilisation d'un gestionnaire de clic sur un bouton.
JButton button = new JButton ("Cliquez sur moi"); button.addActionListener (e -> System.out.println ("Le bouton a cliqué!"));
Et ce fut un rapide coup d’œil à l’utilisation de lambdas dans Java 8.
Lambdas vous a-t-il simplifié la vie depuis Java 8? S'il vous plaît expliquer dans les commentaires ci-dessous.
En savoir plus sur: Java.