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

Récemment, j'ai eu la chance d'utiliser Java grâce à mon travail. J'ai mis à jour mes anciennes connaissances Java (1.3).

Qu'est-ce qu'une expression lambda?

Il s'agit d'une fonction permettant d'implémenter facilement une interface fonctionnelle.

Cela seul est rafraîchissant, alors je voudrais l'expliquer avec un exemple.

Comparer les expressions lambda avec du code

Code qui n'utilise pas d'expressions lambda

public static void main(String[] args) {

  class Sample implements Runnable {
    public void run() {
      System.out.println("I Love Pengin!");
    }
  }

  Runnable runner = new Sample();
  times( 10, runner );
}

public static void times( int count, Runnable runner ) {
  for( int i = 0; i < count; i++ ) {
    runner.run();
  }
}

Code utilisant l'expression lambda

public static void main(String[] args) {

  funcCall( 10, () -> System.out.println("I Love Pengin!") );
}
public static void times( int count, Runnable runner ) {
  for( int i = 0; i < count; i++ ) {
    runner.run();
  }
}

Qu'est-ce qui est bon à utiliser?

L'exemple est le traitement de la fonction times qui répète plusieurs fois le traitement spécifié. Si vous les comparez, vous pouvez voir que l'expression lambda est assez complète.

La méthode de substitution d'une partie du traitement par un autre objet est appelée délégation. En utilisant la formule lambda, je pense que l'avantage est que cette délégation est beaucoup plus facile à écrire.

Comment écrire un style lambda

Format

Voyons le format lors de l'utilisation de l'expression lambda

() -> System.out.println("I Love Pengin!")
  1. Le premier «()» représente l'argument de la méthode. Nous n'utilisons pas d'arguments cette fois, mais vous pouvez les utiliser.
  2. -> décrit le contenu réel du traitement. Si le contenu de traitement couvre plusieurs processus, écrivez -> {Traitement} ici.

Expression Lambda avec arguments

Lors de l'utilisation

En spécifiant l'argument de l'expression lambda, l'argument peut être utilisé pendant le traitement.

(i) -> System.out.println("I Love Pengin!" + i)

En faisant

Il est nécessaire d'utiliser correctement l'interface de la fonction en fonction du type d'argument et de la valeur de retour à utiliser. S'il y a un argument et aucune valeur de retour, ce sera comme suit.

public static void times( int count, Consumer<Integer> runner ) {
  for( int i = 0; i < count; i++ ) {
    runner.accept(new Integer(i));
  }
}

L'interface à utiliser correctement est la suivante.

type Interface de fonction Méthode
0 arguments qui ne renvoient pas de valeur Runnable run
1 argument qui ne renvoie pas de valeur Consumer accept
2 arguments qui ne renvoient pas de valeur BiConsumer accept
0 arguments qui renvoient une valeur Supplier get
1 argument qui renvoie une valeur Function apply
2 arguments qui renvoient une valeur BiFunction apply
1 argument qui renvoie une valeur booléenne Predicate test
Deux arguments qui renvoient une valeur booléenne BiPredicate test
1 argument qui renvoie le résultat de l'opération UnaryOperator test
2 arguments qui renvoient le résultat de l'opération BinaryOperator test

Recommended Posts

Il y a une dizaine d'années, un utilisateur de Java a tenté d'étudier les fonctions de Java8 (édition de style Lambda).
Il y a plus d'une douzaine d'années, un utilisateur de Java a tenté d'étudier les fonctions de Java8 (Generics).
Passer les conditions utilisées dans le filtre d'expression lambda Java8 () comme paramètres
Attribuer des expressions lambda Java8 aux variables et les réutiliser
J'ai essayé de résumer les bases de kotlin et java
L'idée de C # (expression lambda, pour phrase) à mâcher
J'ai créé un client RESAS-API en Java
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Map edition ~
Remplacer par une valeur selon la correspondance avec une expression régulière Java
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Retour rapide sur Java au cours des cinq dernières années
Qu'est-ce qu'une expression lambda (Java)
L'origine des expressions Java lambda
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Comment savoir quelle version Java d'un fichier de classe a été compilée
J'ai essayé de visualiser l'accès de Lambda → Athena avec AWS X-Ray
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Je veux ForEach un tableau avec une expression Lambda en Java
J'ai essayé de résumer les expressions Java lambda
Sortie du livre "Introduction à Java"
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Valider le jeton d'ID d'un utilisateur authentifié par AWS Cognito en Java
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante
J'ai essayé de créer un outil de comparaison des prix des produits Amazon dans le monde entier avec Java, l'API Amazon Product Advertising, l'API Currency (29/01/2017)
Transformer d'une classe normale en un style lambda
Faire une marge à gauche du TextField
[Java] Résumé de la façon d'omettre les expressions lambda
java j'ai essayé de casser un simple bloc
J'ai essayé de développer un site Web pour étudier DUO3.0.
Définir l'heure de LocalDateTime à une heure spécifique
Comment utiliser l'API Java avec des expressions lambda
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
J'ai essayé de casser le bloc avec java (1)
Java Bienvenue dans le marais des tableaux bidimensionnels
[Java] Découpez une partie de la chaîne de caractères avec Matcher et des expressions régulières