[Java Silver] Résumé des points liés aux expressions lambda

Qu'est-ce qu'une expression lambda?

Un mécanisme pour affecter le code que vous souhaitez exécuter à une variable de type d'interface qui n'a qu'une seule méthode à implémenter.

Qu'est-ce qu'une interface fonctionnelle?

Une interface fonctionnelle est une interface qui n'a qu'une seule ** méthode ** à implémenter. Il est appelé «type de fonction» car une sortie est déterminée pour chaque entrée.

Types d'interfaces fonctionnelles

Type d'interface Méthodes à mettre en œuvre Fonctionnalité
Consumer<T> void accept(T) Reçoit et traite les arguments. Arguments qui ne renvoient pas de résultatsconsommateur
Supplier<T> T get() Renvoyer uniquement le résultat sans rien recevoirFournisseur
Predicate<T> boolean test(T) Prenez un argument et évaluez-leAssertif
Function<T, R> R apply(T) Reçoit un argument et le type spécifié(R)Renvoie le résultat deProcesseur

Exemple d'interface fonctionnelle

Référence) Classe pour l'expression lambda Java8

** - La méthode forEach de l'interface java.util.List peut accepter les expressions lambda de type Consumer ** référence) Liste des interfaces pour les documents officiels Document officiel forEach

Exemple)

public static void main(String[] args){
   List<Integer> list = List.of(1,2,3);
   list.forEach((x) ->{System.out.println(x)}); //Reçoit et traite les arguments et ne renvoie pas de valeurs
}

** · La méthode toUpperCase ** de la classe java.lang.String peut recevoir une expression lambda de type Function

référence Document officiel toUpperCase ()

Exemple)

public static void main(String[] args){
   Function<String, String> func = (x) -> {return x.toUpperCase();}; //Prend un argument et renvoie un résultat du type spécifié
   System.out.println(func.apply("hello world"));
}

Comment écrire un style lambda


Basique

Type de fonction type d'interface Nom de la variable = (argument) -> {// Traitement ** return **};

  Function<String, String> func = (x) -> { return x.toUpperCase(); }; 

<Lorsqu'il y a un argument, () est omis>

Type de fonction type d'interface Nom de la variable = Argument-> {// Traitement ** return **};

 Function<String, String> func = x -> { return x.toUpperCase(); }; 

<Lorsqu'il n'y a qu'un seul processus, {} est omis>

Type de fonction type d'interface Nom de la variable = Arguments-> // Traitement; ** * Je ne peux pas écrire une déclaration de retour! !! ** **

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

Notes de type Lambda

** [L'argument formel de l'expression lambda est une constante ou une constante substantiellement] **

-Exemple d'erreur de compilation (de Java Silver Kuromoto)

void sample(){
  int i = 0;
  Supplier<Integer> foo = () -> i;    
 i++;   //j'ai besoin d'être sensiblement constant
  System.out.println(foo.get());
}

** [Notez le type de données de l'argument] ** Les déclarations de variables d'expression Lambda peuvent ** omettre de spécifier les types de données **. Parce que vous pouvez déduire le type de l'argument du type de l'interface fonctionnelle que vous essayez d'attribuer.

Même si vous écrivez une variable d'expression lambda avec ses arguments omis et le type omis, il s'agit d'une variable nouvellement définie. → ** Vérifiez si elle chevauche une variable existante dans la portée de l'expression lambda! !! ** **

-Exemple d'erreur de compilation

final String val = "Hello World";
Consumer<String> func = (val) -> System.out.println(val); //Nom en double causé par la valeur de l'expression lambda et la valeur de la variable locale, erreur de compilation

** [Notez la portée] ** L'expression lambda ** scope ** couvre tout le bloc dans lequel l'expression lambda est écrite

-Exemple d'erreur de compilation

public class Main{
   public static void main(String[] args){
     Srting val = "A";  //Variable locale val dans la portée de l'expression lambda
     Function f = (val) -> {  //Variable d'expression lambda val
       System.out.println(val);
     };
   }
}

Tâches futures

Pour être honnête, je ne comprends toujours pas du tout le style Lambda ... Je voudrais comprendre le site suivant sur le mécanisme de type lambda.

Computer Science and Magic Y Combinator

De plus, je ne comprends pas vraiment quand utiliser l'expression lambda. Quelles sont les méthodes qui peuvent accepter les expressions lambda? Est-il toujours disponible lors de l'écriture de processus simples qui ne sont pas réutilisés? Peut-il être utilisé uniquement par la méthode de l'interface fonctionnelle? Comment le distingue-t-il d'une méthode d'interface fonctionnelle?

Il y a beaucoup de choses que je ne comprends pas.

Recommended Posts

[Java Silver] Résumé des points liés aux expressions lambda
[Java] Résumé de la façon d'omettre les expressions lambda
[Java Silver] Résumé des points de modification d'accès
[Java] Résumé des expressions régulières
[Java] Introduction à l'expression lambda
Résumé des connaissances requises pour réussir Java SE8 Silver
[Introduction à Java] À propos des expressions lambda
Résumé du package [Java Silver Study]
L'origine des expressions Java lambda
Comment utiliser les expressions Java lambda
J'ai essayé de résumer les expressions Java lambda
[java] Résumé de la gestion des caractères
Résumé relatif à Java
[Java] [Maven3] Résumé de l'utilisation de Maven3
[java] Résumé de la gestion des chaînes de caractères
Comprendre les expressions lambda Java 8
À propos des expressions Java lambda
Expliquer les expressions lambda Java 8
Résumé du support Java 2018
Résumé des bons points et des précautions lors de la conversion de l'application Java Android vers Kotlin
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
Utiliser des expressions Java lambda en dehors de l'API Stream
Résumé de l'API de communication Java (1) Comment utiliser Socket
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
Résumé de la mise en œuvre des arguments par défaut en Java
[Java11] Résumé du flux -Avantages du flux-
[Java] Résumé des opérateurs (opérateur)
Flux Java8, résumé de l'expression lambda
Résumé des bases du langage Java
Résumé de la classe Java Math
[Java] Résumé de la syntaxe de contrôle
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
[Java Silver] Ce qu'il faut savoir concernant les instructions switch
Expression lambda Java apprise avec Comparator
Comment étudier Java Silver SE 8
[Pour les débutants] Résumé du constructeur java
[Java] Points à noter avec Arrays.asList ()
À propos de Lambda, Stream, LocalDate de Java8
En route vers l'acquisition de Java SE 11 Silver
[Java] Entrez dans le stdin du processus
Résumé de l'algorithme AtCoder 400 points (édition Java)
Comment passer Oracle Java Silver
Résumé de la programmation orientée objet utilisant Java
Comprendre un peu la formule lambda
Résumé de la session d’étude interne des recrues [Java]
Comment créer un résumé de calendrier Java
Nommer un groupe d'expressions régulières (Java)
Java SE8 Silver ~ La route à franchir ~
Comment utiliser la méthode de soumission (Java Silver)
De nos jours, les expressions Java Lambda et l'API de flux
Récapitulatif des modifications autres que JEP de Java10
Résumé de l'écriture des arguments d'annotation
[Java] Résumé personnel des instructions conditionnelles (basique)
Résumé de la participation au JJUG CCC 2019 Spring
Liste des articles recommandés liés à Corda