Java 8 pour démarrer maintenant ~ for Each et expression lambda ~

Java 9 a également été publié, mais je ne suis toujours pas sûr de Java 8, je vais donc le résumer.

forEach() En Java8, la méthode forEach () a été ajoutée à List, Map, arrays, etc. Avant Java 7

for(String s : list) {
	System.out.println(s);
}

Et le processus qui utilisait 3 lignes

list.forEach(s -> System.out.println(s));

Vous pouvez maintenant écrire sur une seule ligne.

Pourquoi est-ce que je peux l'écrire comme ça?

Interface fonctionnelle

En Java8, une interface qui n'a qu'une seule méthode abstraite est appelée interface fonctionnelle et peut être transmise en tant qu'expression lambda.

FunctionalIf.java


@FunctionalInterface
public interface FunctionalIf {

	public String retStr(int number);
}

Cependant, les méthodes suivantes peuvent être incluses -Méthode statique ・ Méthode par défaut -Override de la méthode publique de java.lang.Object (toString () et equals ())

L'ajout de l'annotation @ FunctionalInterface entraînera une erreur de compilation lorsque les conditions ne sont pas remplies, mais ce n'est pas obligatoire.

Style Lambda

Les expressions Lambda sont des grammaires introduites dans Java 8. Vous pouvez implémenter une interface fonctionnelle avec la syntaxe suivante

(Arguments de la méthode à implémenter) -> {En traitement}
FunctionalIf func = (int num) -> { return num +" * 2 = " + num*2;};

Cela seul est assez concis, mais il peut être omis davantage.

Le type et () peuvent être omis si la méthode à implémenter a un argument

FunctionalIf func = num -> { return num +" * 2 = " + num*2;};

Puisqu'il y a un argument, `` num '' peut être déduit comme étant de type int.

Si le processus est une simple phrase, return et {} peuvent être omis

FunctionalIf func = num -> num +" * 2 = " + num*2;

Puisqu'il s'agit d'une phrase simple, le résultat de la phrase peut être déduit comme sortie.

Utilisation du style lambda

J'ai fini avec ce format

//Implémenter une interface fonctionnelle avec une expression lambda
FunctionalIf func = num -> num +" * 2 = " + num*2;

//Utilisez la méthode implémentée
System.out.println(func.retStr(1));
System.out.println(func.retStr(2));

Résultat d'exécution


1 * 2 = 2
2 * 2 = 4

ForEach () à nouveau

La méthode forEach () de Java 8 peut être utilisée dans une classe qui implémente la méthode d'interface Iterable default void forEach (Consumer <? Super T> action). https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html#forEach-java.util.function.Consumer-

L'argument Consumer '' est une interface fonctionnelle avec void accept (T t) '' (reçoit n'importe quel argument et ne retourne pas de valeur). https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Consumer.html

list.forEach(s -> System.out.println(s));

Donc, vous avez passé l'implémentation de `` Consumer '' comme argument de la méthode forEach () dans une expression lambda.

Précautions lors de l'utilisation du type lambda

Portée variable

Les variables déclarées en dehors de l'expression lambda peuvent être référencées dans l'expression lambda. Cependant, il ne peut pas être modifié.

String str = " item";
list.forEach(s -> {
  System.out.println(s + str); //Peut être référencé
  // str = " changed";  //Le changement est mauvais
});

De plus, les variables déclarées en dehors de l'expression lambda ne peuvent pas être utilisées dans les noms d'argument des variables (une erreur de compilation se produira).

Restrictions de nom de variable

Vous ne pouvez pas utiliser un seul «_» dans le nom de variable d'un argument d'expression lambda.

Recommended Posts

Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
Java8 pour démarrer maintenant ~ Facultatif ~
Java 8 ~ Stream API ~ pour commencer maintenant
[Java] Expression Lambda
Expression lambda Java
Récapitulons maintenant l'expression lambda Java
Java 8 pour démarrer maintenant ~ API de date et d'heure ~
expression 1 de la table lambda neutre java
Fonctionnalité d'expression lambda Java 8
mémo d'expression java lambda
expression lambda java [écriture de notes]
Introduction au style lambda
Etudier Java 8 (expression lambda)
Je veux ForEach un tableau avec une expression Lambda en Java
Évaluer java8 ~ Type Lambda ~
Expression lambda Java à nouveau
[Java] Interface fonctionnelle / expression lambda
Flux Java8, résumé de l'expression lambda
[Java] Introduction à l'expression lambda
[Introduction à Java] À propos des expressions lambda
Java, interface pour partir du débutant
Qu'est-ce qu'une expression lambda (Java)
Java, des tableaux pour débuter avec les débutants
J'ai essayé de résumer Java 8 maintenant
Comment utiliser les expressions Java lambda
J'ai essayé de résumer les expressions Java lambda
De nos jours, les expressions Java Lambda et l'API de flux
Implémentation Java pour créer et résoudre des labyrinthes
[Java] Comment sortir et écrire des fichiers!
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
[Introduction à Java] À propos des déclarations et des types de variables
De Java à C et de C à Java dans Android Studio
Transformer d'une classe normale en un style lambda
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Deux façons de démarrer un thread en Java + @
Instruction de commutation Java et pause, Kotlin lorsque l'expression ...
[Java] Résumé de la façon d'omettre les expressions lambda
Essayez d'intégrer Ruby et Java avec Dapr
Charger et télécharger des notes en Java sur le stockage Azure
Je veux utiliser java8 forEach avec index
Efficace Java 3e édition Chapitre 7 Lambda et Stream
Comment obtenir et étudier Java SE8 Gold
Comment résoudre les problèmes d'expression en Java
Comment accéder aux méthodes et champs Java Private
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -
[Java] Comment utiliser la classe Calendar et la classe Date
Passer les conditions utilisées dans le filtre d'expression lambda Java8 () comme paramètres
[Java] méthode forEach
Java et JavaScript
Bonjour Java Lambda
Introduction à Java
Fonctionnalités susceptibles d'entrer dans Java 10 pour le moment
Convertir l'énumération Java et JSON vers et depuis Jackson
[Java] Types de commentaires et comment les rédiger
[Java Silver] Résumé des points liés aux expressions lambda
[Java] Trier la liste à l'aide de flux et d'expressions lambda
[Session d'étude interne] Principes de base de l'expression Java-Lambda et de l'API Stream- (13/07/2017)
[Java] Convertit les chaînes de caractères en majuscules / minuscules (AOJ⑨ --swap majuscules / minuscules)