Récapitulons maintenant l'expression lambda Java

J'utilise généralement des langages de script.

J'ai eu une rare opportunité de toucher Java, alors À propos des expressions Java lambda que je ne connaissais que peu Bien que ce soit le moment de la sortie de Java 11, je vais le résumer pour confirmation.

1. Avant l'introduction du type lambda

Disons que vous faites partie d'une excellente équipe de développement de jeux. Je serai en charge de la partie liée au nom de l'utilisateur. À l'avenir, le titre du personnage principal changera pour chaque personnage, j'ai donc été chargé du développement de l'API autour de cela.

Définit l'interface responsable du formatage du nom.

NameFormatter.java


interface NameFormatter {
  public abstract String format(String familyName, String firstName);
}

La classe d'implémentation et la partie d'exécution principale ressemblent à ceci.

Chanformatter.java


class ChanFormatter implements NameFormatter {
  @Override
  public String format(String familyName, String firstName){
    return firstName + "Chan";
  }
}

Main.java


class Main {
  public static void main(String[] args){
    String familyName = "Date";
    String firstName = "Masamune";

    NameFormatter nf = new ChanFormatter();
    String formatted = nf.format(familyName, firstName);

    System.out.println("salut!" + formatted + "。");
    System.out.println("Je commence un grand jeu!");
  }
}

Cliquez ici pour le résultat de l'exécution

salut! Masamune-chan.
Je commence un grand jeu!

C'est familier.

Au contraire, préparons un autre formateur pour le noble personnage.

DonoFormatter.java


class DonoFormatter implements NameFormatter {
  @Override
  public String format(String familyName, String firstName){
    return familyName + "Tono";
  }
}

Vous pouvez facilement changer le nom en changeant simplement la nouvelle classe dans la section d'exécution principale.

Main.java(diff)


     String familyName = "Date";
     String firstName = "Masamune";
 
-    NameFormatter nf = new ChanFormatter();
+    NameFormatter nf = new DonoFormatter();
     String formatted = nf.format(familyName, firstName);
 
     System.out.println("salut!" + formatted + "。");
salut! Date.
Je commence un grand jeu!

1.1. Classe anonyme

Maintenant, disons que vous en avez assez d'une excellente équipe de développement de jeux. En effet, il n'est pas possible de dépenser des frais de personnel pour l'entretien d'un groupe de classe aussi petit. L'équipe de développement a décidé d'implémenter le formateur en utilisant une classe anonyme.

Au lieu de créer des fichiers individuels pour une classe de cette taille La classe anonyme est une fonction à définir et à éliminer sur place.

Avec la classe anonyme, vous n'avez besoin que des deux fichiers suivants:

Nameformatter.java


//Republier
//Comme ci-dessus
interface NameFormatter {
  public abstract String format(String familyName, String firstName);
}

Main.java


class Main {
  public static void main(String[] args){
    NameFormatter chan = new NameFormatter(){
      @Override
      public String format(String familyName, String firstName){
        return firstName + "Chan";
      }
    };

    NameFormatter dono = new NameFormatter(){
      @Override
      public String format(String familyName, String firstName){
        return familyName + "Tono";
      }
    };

    String familyName = "Date";
    String firstName = "Masamune";

    String formatted = chan.format(familyName, firstName);
    System.out.println("salut!" + formatted + "。");
    System.out.println("Je commence un grand jeu!");
  }
}

C'est une forme dans laquelle la méthode de format est liée à la variable.

2. Type Lambda

En passant, c'est l'expression lambda du sujet principal.

Dans la situation comme cette fois La seule méthode que la classe NameFormatter doit implémenter est format. Par conséquent, vous ne pouvez remplacer que la méthode format. Je pense qu'il est redondant de copier et coller à chaque fois avec le format public String (String familyName, String firstName). Je veux que vous fassiez de mon mieux pour le compilateur.

Le style Lambda est une notation qui peut répondre à une telle demande. Il peut s'écrire comme suit.

Main.java


class Main {
  public static void main(String[] args){
    NameFormatter chan = (String familyName, String firstName) -> {
      return firstName + "Chan";
    };

    NameFormatter dono = (String familyName, String firstName) -> {
      return familyName + "Tono";
    };

    String familyName = "Date";
    String firstName = "Masamune";

    String formatted = chan.format(familyName, firstName);
    System.out.println("salut!" + formatted + "。");
    System.out.println("Je commence un grand jeu!");
  }
}

J'ai pu écrire clairement. c'est tout.

3. C'est ça?

C'est tout pour l'expression lambda. L'expression lambda elle-même n'est qu'une abréviation pour une classe anonyme, pas un gros sujet.

Le cercle principal n'est pas de type lambda, mais les deux points suivants.

Cette fois, j'ai utilisé l'interface d'origine appelée NameFormatter, De nombreuses interfaces sont fournies et sont destinées à utiliser des expressions lambda. L'un d'eux est java.util.function.Function <T, R>.

De plus, de nombreuses méthodes communes aux types de fonctions telles que map et filter ont été ajoutées en tant qu'API Java Stream. Ces méthodes sont utilisées en passant l'interface de java.util.function comme argument.

4. Conclusion

Le style Lambda n'est pas effrayant.

5. Impressions

Je veux pouvoir utiliser l'API Stream en douceur

6. Référence

Comprendre les expressions Java 8 Lambda-Qiita

Recommended Posts

Récapitulons maintenant l'expression lambda Java
[Java] Expression Lambda
Expression lambda Java
expression 1 de la table lambda neutre java
Variations d'expressions lambda Java
Fonctionnalité d'expression lambda Java 8
mémo d'expression java lambda
expression lambda java [écriture de notes]
Etudier Java 8 (expression lambda)
Évaluer java8 ~ Type Lambda ~
Expression lambda Java à nouveau
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
[Java] Interface fonctionnelle / expression lambda
Flux Java8, résumé de l'expression lambda
Contenu d'apprentissage de base Java 9 (expression lambda)
Qu'est-ce qu'une expression lambda (Java)
L'origine des expressions Java lambda
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Étudions Java
[LeJOS] Contrôlons le moteur EV3 avec Java
Comment utiliser l'API Java avec des expressions lambda
Bonjour Java Lambda
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -
Passer les conditions utilisées dans le filtre d'expression lambda Java8 () comme paramètres
[Java] Déclarons les variables utilisées dans la boucle dans la boucle [Variations dans le bloc]
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
[Java] Trier la liste à l'aide de flux et d'expressions lambda
Utiliser des expressions Java lambda en dehors de l'API Stream
Apprentissage rapide Java "Introduction?" Partie 2 Écrivons le processus
[LeJOS] Contrôlons à distance le moteur EV3 avec Java
Premiers pas avec les anciens ingénieurs Java (Stream + Lambda)
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle d'objet nul -
Repenser les modèles d'expression et de conception de flux Java8 - Modèle de méthode
apprentissage java (expression conditionnelle)
Quarkus enregistre Java Lambda! ??
Comprendre les expressions lambda Java 8
Comprenons la fonction!
Consultez les annotations Java maintenant
À propos des expressions Java lambda
Il y a une dizaine d'années, un utilisateur de Java a tenté d'étudier les fonctions de Java8 (édition de style Lambda).
Introduction au style lambda
Expliquer les expressions lambda Java 8
Raclons avec Java! !!
Injection d'expression de table Java
résumé des expressions régulières java
Attribuer des expressions lambda Java8 aux variables et les réutiliser
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
L'idée de C # (expression lambda, pour phrase) à mâcher
Java8 Lambda Expression & Stream Design Pattern Repenser - Modèle de chaîne de responsabilité -
Conseils autour de l'exemple pour publier Lambda de Java sur CodePipeline