Java Lambda Ausdruck Memo

Funktionsschnittstelle

Eine funktionale Schnittstelle ist eine Schnittstelle, in der nur eine abstrakte Methode deklariert ist. Ansonsten gibt es keine besonderen Einschränkungen. Zum Beispiel spielt es keine Rolle, ob Sie mehrere Standardmethoden und private Methoden haben.

Was ist ein Lambda-Ausdruck?

Eine Funktion, die eine Schnittstellenimplementierung auf dem Client (Aufrufer) ermöglicht. Bei Verwendung von Lambda-Ausdrücken ist es nicht erforderlich, eine konkrete Klasse zu erstellen, die die Schnittstelle implementiert. Lambda-Ausdrücke sind nur möglich, wenn Sie eine Implementierung einer funktionalen Schnittstelle angeben. Dies liegt daran, dass der Compiler nicht angeben kann, welcher abstrakten Methode die Implementierung (Definition) zugewiesen werden soll, wenn die Schnittstelle mehrere abstrakte Methoden enthält, denen Sie eine Implementierung zuweisen möchten.

Schließung

Wenn Sie eine Implementierung mit einem Lambda-Ausdruck, einer lokalen Klasse oder einer anonymen Klasse in einer Methode angeben, eine Funktion, mit der die lokalen Variablen des Clients in dem Block verwendet werden können, der die Implementierung angibt. Variablen, die als Abschlüsse verwendet werden, werden in Lambda-Instanzen (für Java) als Felder kopiert. In einigen Sprachen werden Referenzen übergeben. Die im Abschluss übergebenen Variablen sind endgültig.

Codebeispiel

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());
        }
}

Was von @ 1 zurückgegeben wird: return ist eine Instanz einer Klasse, die die InfiniteIntSequence-Schnittstelle erbt und die next () -Methode überschreibt. Da InfiniteIntSequence eine funktionale Schnittstelle ist, ist garantiert, dass es nur eine Zusammenfassung und einen Rasen gibt. Daher kann der Compiler verstehen, dass next () überschrieben wird, sodass das Schreiben verschiedener Dinge weggelassen werden kann. next () ist eine Signaturmethode, die einen int-Typ ohne Argumente zurückgibt.

Recommended Posts

Java Lambda Ausdruck Memo
Java Lambda Ausdruck [Notiz schreiben]
[Java] Lambda-Ausdruck
Java Lambda Ausdruck
Variationen von Java-Lambda-Ausdrücken
Java 8 Lambda-Ausdruck Feature
Java 8 studieren (Lambda-Ausdruck)
Überprüfen Sie java8 ~ Lambda Typ ~
Wieder Java-Lambda-Ausdruck
[Java] Funktionsschnittstelle / Lambda-Ausdruck
Java-Memo
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Java Basic Learning Content 9 (Lambda-Ausdruck)
Was ist ein Lambda-Ausdruck (Java)
Java alles Memo
Java Silver Memo
Java SE 7 Hinweis
Java alles Memo 2
Hallo Java Lambda
Java-Spezifikationsnotiz
Java-Muster-Memo
Lassen Sie uns nun den Java-Lambda-Ausdruck rekapitulieren
Memo zur Java-Entwicklungsumgebung
Java Grundwissen Memo
Java-Lernnotiz (Methode)
Java Kuche Day Memo
Quarkus rettet Java Lambda! ??
Java Se 8 Programmierer Ⅰ Memo
Java bezahlte private Memo
Verstehen Sie Java 8 Lambda-Ausdrücke
Verwendung der Java-API mit Lambda-Ausdrücken
Java-Lernnotiz (grundlegend)
(Memo) Java für Anweisung
Über Java-Lambda-Ausdrücke
Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~
Einführung in den Lambda-Stil
Erläutern Sie Java 8-Lambda-Ausdrücke
Java-Lernnotiz (Schnittstelle)
[Java] Implizites Vererbungsprotokoll
Injektion von Java-Tabellenausdrücken
Java-Lernnotiz (Vererbung)
Programmiernotiz für Java-Wettbewerbe
Zusammenfassung der regulären Ausdrücke von Java
[Memo] Java Linked List
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Null-Objektmuster -
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Vorlagenmethode -
Java (WebSphere Application Server) Hinweis [1]
[Java] Namensnotiz des Variablennamens
Java-Memo-Teilzeichenfolge (Standardklasse)
Java-Lernnotiz (Datentyp)
Länge des Java-Memos (Standardklasse)
Java Silver Lernmethode Memo
Erstellen Sie eine Java-Methode [Memo] [java11]
Java Silver Prüfungsvorbereitungsnotiz
[Java] Einführung in den Lambda-Ausdruck