mémo d'expression java lambda

Interface fonctionnelle

Une interface fonctionnelle est une interface dans laquelle une seule méthode abstraite est déclarée. À part cela, il n'y a pas de restrictions particulières. Par exemple, peu importe si vous avez plusieurs méthodes par défaut et méthodes privées.

Qu'est-ce qu'une expression lambda?

Une fonction qui donne une implémentation d'interface sur le client (appelant). En utilisant des expressions lambda, il n'est pas nécessaire de créer une classe concrète qui implémente l'interface. Les expressions Lambda ne sont possibles que si vous donnez une implémentation d'une interface fonctionnelle. En effet, lorsqu'il existe plusieurs méthodes abstraites dans l'interface auxquelles vous souhaitez donner une implémentation, le compilateur ne peut pas spécifier à quelle méthode abstraite donner l'implémentation (définition).

fermeture

Lorsque vous donnez une implémentation à l'aide d'une expression lambda, d'une classe locale ou d'une classe anonyme dans une méthode, une fonction qui permet aux variables locales du client d'être utilisées dans le bloc qui donne l'implémentation. Les variables utilisées comme fermetures sont copiées sous forme de champs dans les instances lambda (pour java). Dans certaines langues, les références sont transmises. Les variables passées dans la clôture sont définitives.

Exemple de code

InfintieIntSequence.java


public interface InfiniteIntSequence{
        default public boolean hasNext(){ return true; }
        public int next();


        public static InfiniteIntSequence generate(IntSupplier s){
                return s::getAsInt; //@1
        }

        public static InfiniteIntSequence iterate(int seed, IntUnaryOperator f){
                return new InfiniteIntSequence(){
                        int lseed = seed; //@2
                        @Override public int next(){
                                int res=lseed;
                                lseed=f.applyAsInt(lseed);
                                return res;
                        }
                };
        }

        public static InfiniteIntSequence random(int from, int until){
                Random r = new Random();
                int bound = until-from;
                if(0<bound) return ()->r.nextInt(bound)+from;
                else throw new IllegalArgumentException();
        }

        public static InfiniteIntSequence range(int from){
                return iterate(from, i -> i+1 );
        }

        default public void forEach(IntConsumer c, int n){
                while(n-- > 0 && hasNext() ) c.accept(next());
        }
}

Ce qui est retourné par @ 1: return est une instance de classe qui hérite de l'interface InfiniteIntSequence, en remplaçant la méthode next (). Comme InfiniteIntSequence est une interface fonctionnelle, il est garanti qu'il n'y a qu'un seul abstract et sod. Par conséquent, le compilateur peut comprendre qu'il remplace next (), il est donc possible d'omettre d'écrire diverses choses. next () est une méthode de signature qui renvoie un type int sans argument.

Recommended Posts

mémo d'expression java lambda
expression lambda java [écriture de notes]
[Java] Expression Lambda
Expression lambda Java
Variations d'expressions lambda Java
Fonctionnalité d'expression lambda Java 8
Etudier Java 8 (expression lambda)
Évaluer java8 ~ Type Lambda ~
Expression lambda Java à nouveau
[Java] Interface fonctionnelle / expression lambda
Mémo Java
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)
java quoi que ce soit mémo
Mémo Java Silver
Remarque sur Java SE 7
java n'importe quoi mémo 2
Bonjour Java Lambda
Mémo de spécification Java
Mémo de modèle Java
Récapitulons maintenant l'expression lambda Java
Mémo de l'environnement de développement Java
mémo de connaissances de base java
Mémo d'apprentissage Java (méthode)
Mémo Java Kuche Day
Quarkus enregistre Java Lambda! ??
java se 8 programmeur Ⅰ mémo
Mémo privé payant Java
Comprendre les expressions lambda Java 8
Comment utiliser l'API Java avec des expressions lambda
Mémo d'apprentissage Java (basique)
(Mémo) Java pour instruction
À propos des expressions Java lambda
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
Introduction au style lambda
Expliquer les expressions lambda Java 8
Mémo d'apprentissage Java (interface)
[Java] Mémo d'héritage implicite
Injection d'expression de table Java
Mémo d'apprentissage Java (héritage)
mémo de programmation du concours java
résumé des expressions régulières java
[Mémo] Liste liée Java
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -
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
Remarque sur Java (WebSphere Application Server) [1]
[Java] Mémo de nom du nom de variable
Sous-chaîne de mémo Java (classe standard)
Mémo d'apprentissage Java (type de données)
Longueur du mémo Java (classe standard)
Mémo de la méthode d'étude Java Silver
Créer une méthode java [Memo] [java11]
Mémo de préparation à l'examen Java Silver
[Java] Introduction à l'expression lambda