Transkripte
1. 01: Hallo, da. Und willkommen zu diesem Kurs, der eine umfassende Einführung in die Arbeit mit dem Job bietet, eine Plattform, auf der mein Name sprechen könnte. Ich werde dein Instruktor sein. Ich habe über 20 Jahre Erfahrung ist ein Software-Ingenieur und Code-Level-Architekt, der in
verschiedenen Organisationen von großen globalen Investmentbanken durch zwei kleine
High-Tech-Startupsarbeitet verschiedenen Organisationen von großen globalen Investmentbanken durch zwei kleine
High-Tech-Startups . Ich bin wirklich aufgeregt, meinen Job, mein
richtiges Wissen zu besprechen , und wir werden eine Menge Spaß zusammen haben, um über all die fantastischen neuen Funktionen zu
lernen, die Job zu bieten hat. Also lasst uns anfangen.
2. 02 Einführung von Java 8: bevor wir uns Java acht anschauen. Seit Sex und Beispiele, es ist, dass wir nur ein paar Augenblicke genommen haben, um ein wenig darüber zu verstehen, was Sie sind für Es ist auf dem was es auf den Tisch bringt. John gibt es schon seit weit über 20 Jahren. Jetzt 23. In der Tat wird wahrscheinlich mehr über Java acht gesprochen, diese spezielle Version als jede andere Version und zu Recht. Es ist die bedeutendste Version seit dem Start des Jobs, da sie die
Sprachänderungen in die Plattform einführt . Was ich gerade reden neue MP Augen und Geschwindigkeit und Werkzeuge Verbesserungen. Jetzt gibt uns diese Version der Java-Plattform neue Konstrukte im Job ein Problem in Sprache selbst. In diesem Abschnitt werden
wir einen Kontext bekommen und sehen, was Java es ist, was die Männer Bausteine sind und wie sie sich zueinander beziehen. Auf diese Weise haben wir einen guten Überblick über die Plattform und das Fundament, auf dem wir aufbauen können. Also lasst uns loslegen
3. 03-Unterschied zwischen Object und funktionellen Programming: in diesem Video werden
wir einen weiteren Blick auf die Idee hinter Ihren Betrieben haben, damit wir alles in den
Kontext stellen können . Java. Es ist ein großes Thema, also wird es uns etwas Gutes tun. Also, was macht es jetzt tickt? Was ist Javaid und warum ist es so wichtig? Nun, mit Java gibt es eine neue große Idee in der Stadt, und das ist die Idee der funktionalen Programmierung. Das ist es, worum es bei Job acht geht. Wirklich. Nun, da Java-Programmierer an die Idee der objektorientierten Programmierung O R P gewöhnt waren. Dies ist, wo die Männer Baustein unserer Programme, die Dinge, die das Problem gebaut wird. städtische Selbst ist das Objekt. Wir erstellen Klassen, die eine Domäne modellieren. Wissen Sie, ein Szenario der realen Welt, das für die von uns entworfene Anwendung relevant ist, erstellt Instanzen dieser Klassen. Dies sind Objekte, einige tote REM-Verhalten
geworfen, und dann haben wir eine Anwendung, so dass API, die Objekte in seinem Hauptbaustein auf verwendet. Wir sind mit denen bereits vertraut, seit wir seit Beginn von
Java so aufgerufen haben. Jetzt in der funktionalen Programmierung ist
der Herrenbaustein die Funktion. Es ist etwas, das einen Eingang nimmt. Tut etwas, um es führt eine Operation auf Rückläufen, eine Ausgabe. Also haben wir hier zwei sehr unterschiedliche Programmieransätze. Wir können Objekte in unserer P-Welt verwenden oder wir können Funktionen in einer funktionalen Welt nutzen. Jetzt denken Sie wahrscheinlich, wie bezieht sich das auf Job Acht? Nun, wie das mit dem Job zusammenhängt, ist die Aufgabe von AIDS als funktionale Programmierung für die Plattform. Das bedeutet, dass wir jetzt das Beste aus beiden Welten haben. Wir können Objekte und ihre Methoden auf die imperative Weise verwenden, wie wir es schon immer gewohnt waren . Oder wir können mit komponierten Funktionen erstellen, sie auf deklarative Weise
zusammensetzen, die beiseite kurz gehen würde,
ich benutze nur zwei Begriffe dort, ich möchte nicht, dass sie einfach an Ihnen vorbeifliegen, ohne
genau zu verstehen , was sie bedeuten Imperativ. Und die Klarheit. Nur damit Sie sich bewusst sind, mit diesen Männern, die vorwärts gehen, sagt, dass sie zwei sehr unterschiedliche Programmierstile auf Methodologien sind. Eine Imperative Art und Weise zu programmieren oder in einer imperativen Programmiersprache zu programmieren bedeutet also, dass Sie genau definieren, wie etwas getan werden soll. Diese Ebene beschäftigte sich also mit Dingen, wie Schleifen den Variablen zuerkannt wurden, die die Flags
verwenden, die wir setzen, um nach bestimmten Bedingungen zu überprüfen, um den Ausgang aus
der Schleife steuern zu können , usw. Imperative Problem basiert auf diesen Arten von besten Level-Konstrukten, so dass es irgendwie die Lösung von Grund auf zu etwas codiert. Sie sind wirklich Koerting, Die Implementierung Schlag für Schlag im Detail erlaubt durch diese verschiedenen
Standard-Programmiersprache Konstrukte, die Ihnen zur Verfügung stehen. Das ist zwingende Programmierung. Wir sind alle daran gewöhnt, dies zu tun, denn so ziemlich haben wir bis zu diesem Punkt Dinge mit Arbeit gemacht. Betrachten Sie es nur als regelmäßige Programmierung, da es das ist, was jeder jetzt in der Java-See gewöhnt ist, Suchende Person dot Netzwelten programmieren in einem deklarativen Wetter, unsere Programmierung mit einem deklarativen Problem in der Sprache. Das bedeutet, dass wir uns nicht darauf konzentrieren, wie wir etwas tun, wie wir eine unerläßliche Programmierung sind. Wir sind also kein Problem in den tatsächlichen Details einer Lösung. Mit diesen Base-Level-Konstrukten wie Schleifen, Bedingung ,
ALS ,
switch-Anweisungen, ,
switch-Anweisungen,usw. Kein Wunder, dass die Klarheit des Stils. Wir spezifizieren nicht, wie wir Dinge machen, sondern definieren stattdessen, was wir tun wollen. Die Verschiebung geht also dazu, anzugeben, was Sie geschehen wollen, im Gegensatz zu wie Sie es wollen. Wir werden sehen, wie wir durch den Kurs gehen, wie Java-Rate es uns erlaubt, beide
Stile schwächen zu verwenden, halten Sie sich an die traditionelle imperative Art, Dinge zu codieren, wie wir schon immer verwendet worden, um. Oder wir nutzen die funktionalen Programmierfunktionen, die von der Plattform bereitgestellt werden, um unsere Lösungen in der Klarheit der Art und Weise zu präsentieren. Wir werden das mehr sehen, wenn wir später im Kurs zu Pipelines und Streams kommen. Aber ich wollte nur sicherstellen, dass wir verstehen, was diese beiden Begriffe bedeuteten, vorwärts zu gehen. Also jetzt sind wir auf der gleichen Seite mit einem anderen Programmierparadigmen, objektorientiert in seiner imperativen Form und funktional in seiner Klarheit Form. Sie können sich wahrscheinlich vorstellen, dass dies unter dem Problem im Paradigma auf die
Java-Plattform gesetzt wird, was effektiv ist, was sie mit Job AIDS gemacht haben, tatsächlich eine große Sache ist. Und das ist es. Es stellt sich heraus, es hat eine massive Wirkung und nimmt einen Job, Plattform auf
ein ganz neues Niveau in der Programmiererproduktivität und Ausdruckskraft innerhalb der Karte. Einfach gesagt, bedeutet
dies, dass Kurt, geschrieben mit Java acht, jetzt einfacher zu schreiben
ist, weil dieser einfacher zu debuggen Grund für die Anpassung von Männern 10 wirklich ist eine große Fortschritte der Arbeit der Plattform, und es wird Sie zu einem besseren und produktiveren Entwickler dafür machen. Du wirst aufgeregt sein, alles darüber zu erfahren und zu sehen, was es für dich tun kann. Ich bin sicher, dass ich alles darüber in den nächsten Videos erklären werde.
4. 04 Ein kurzer Blick auf die wichtigsten Java 8-Funktionen: damit die Arbeitsplatzunterstützung funktionale Programmierung auf der Plattform eingeführt werden kann. Es wurden einige neue Sprachfunktionen hinzugefügt. Die meisten dieser Funktionen gibt es, warum Sie das erlauben, auf eine funktionale Art und Weise zu programmieren oder sie wurden eingeführt, um
diese neue funktionale Programmiermaschine zu integrieren, wenn Sie in die Plattform möchten. Also lasst uns jetzt eingraben und einen Blick auf die verschiedenen Stücke von Job acht werfen, die funktionelles Problem unmöglich machen. Übrigens, wenn wir diese durchmachen, klingen
sie vielleicht einschüchternd. Aber mach dir keine Sorgen. Wir gehen zu einer detaillierteren und späteren Einheiten. Wir stellen sie hier vor, damit sie sich nicht so Außerirdische fühlen. Sie, wenn wir kommen, um über sie in jedem einzelnen Abschnitt zu sprechen, so hängen Sie dort oder werden klar, wie wir durch den Kurs kommen und schauen Sie sie alle zusammen. Zuerst haben wir Lander-Ausdrücke. Diese ermöglicht es, Verhaltensfunktionen zu übergeben, was ein Schlüsselaspekt der funktionalen Programmierung ist. Also, was? Wir meinen vergangenes Verhalten. Nun, mit Verhalten meinen
wir einen Teil Code, der ausgeführt werden könnte. Jemand erlaubt es uns, Codefragmente in einem netten,
einfachen und leichten zu übergeben . Sie können sie als Methoden ohne einen Namen vorerst vorstellen, die auf rot von Variablen auf vergangenen zwei Methoden zugewiesen werden könnten. Hier ist ein einfacher unter-Ausdruck, um Ihnen eine Idee vor Java zu geben. Acht. Sie können das Verhalten nur übergeben, indem Sie eine Klasse erstellen, in der die Methode untergebracht ist. Fortsetzung des Codeabschnitts, den Sie übergeben wollten, aber anders. Wann immer Sie Code übergeben wollten, mussten
Sie eine Klasse dafür erstellen, nur um das tun zu können. Und es wird diese Klasse sein, die die Methode hatte, die wiederum, hätte die Kinder könnten Sie tatsächlich passieren wollen? Also mit Java Acht. müssen wir nicht mehr tun, dank einem Lander. Ausdrücke, wie Sie dort sehen können, schöne und leichte Peitsche. Sie sind nicht schwer in den Händen. Wir brauchen nicht viel zu tippen. Vergleichen Sie das mit der alten Schule Art, Dinge in der Pre-Job Acht Welt zu tun. Wir müssen so etwas wie dieses schreckliche Zeug machen, das Sie hier sehen können, dass wir die
umschließende Klasse schreiben müssen, über die wir gerade gesprochen haben. Wir müssen die klobige Methodensignatur codieren, um möglicherweise eine Schnittstelle zu haben, seit wann ihre Vergangenheit an was auch immer sie erhalten muss. Die Callingcard muss eine Möglichkeit haben, darauf zuzugreifen. Und das ist
natürlich durch Schnittstellen,
so dass natürlich durch Schnittstellen, Sie sehen können, dass der pre-java acht Weg klobig,
ausführlich ist, ausführlich ist, und es fühlt sich einfach unnötig an, wirklich. Es ist nicht nur ein zusätzliches Tippen. musst du tun. Sie haben die zusätzlichen Dateien in Ihrem Projekt zu einer für die Klasse und möglicherweise einer für die Schnittstelle. Wenn Sie es selbst zur Verfügung stellen und Sie das mentale Gepäck jetzt haben wollen, um
mit zwei neuen Typen umzugehen , na ja, die gute Nachricht ist, dass mit falschen Ausdrücken in Java eingeführt,
aßen , all dies überflüssig. Du schreibst einfach und übergibst ein Lambda auf deine Darlehensausdrücke. Entfernen Sie die Notwendigkeit, diese Musterplate-Karte um die Methode zu erstellen, und ich wurde zu sauber und prägnant nur den Code übergeben. Als Nächstes haben
wir funktionale Schnittstellen, die eine Reihe von sogenannten Zielzeiten für Lander-Ausdrücke bereitstellen. Es ist großartig, dass wir jetzt Funktionen um Zoll-Arbiter,
Lander-Ausdrücke übergeben können , aber wir müssen immer noch Dinge Typen behalten. Wenn beim Speichern des Landers Ausdruck in Variablen sie von Methoden übergeben oder zurückgeben, vergessen Sie
nicht, dass alles immer eingegeben werden muss. Wann immer Sie diese Dinge auf Java tun, ändert
sich das nicht. Dieser Job ist immer noch sehr eine stark typisierte Sprache, so dass es eine Art Mechanismus geben muss, um Dinge auf funktionalen
Schnittstellen typsicher zu halten . Tun Sie das für uns. Schenken Sie einen kleinen Blick, aber ohne in massives Detail zu gehen. Hier. Dies ist eine Funktionsschnittstelle in Aktion. Sie können sehen, dass wir einen Darlehensausdruck zuweisen
, der Zahlen zu einer so genannten funktionalen Schnittstelle verdoppelt, die in Job acht definiert ist. Die inter-Funktion, eine Funktion, die wir aufrufen, nimmt eine Eingabe auf, gibt eine Ausgabe zurück, und in diesem Fall dauert
es eine inter und gibt zurück und endet, weil es ziemlich üblich Java ist. Es gibt uns eine vordefinierte Funktionsschnittstelle dafür, was ist das in der Funktion? Sie sehen, Sie können auch Ihre eigenen Funktionsschnittstellen schreiben, so dass Sie sich keine Sorgen machen müssen. Sie haben immer eine Zielseite für Ihre Bundesländer. Einstieg in die Produktivität von Programmierern. Es gibt jetzt eine brandneue Stream-Vers-Bereitstellung, die eine Versorgung funktionale Programmierung führt Sammlungen und Kettenoperationen zusammen, zum Beispiel
Filtern einer Liste von Objekten, als eine Zuordnung für den Zugriff auf die gefilterte -Objekte auf Schließlich konvertieren sie wieder in einen Satz, so dass das Ergebnis ein gefilterter Satz des Maps-Typs wäre. Hier ist ein Codeausschnitt, der genau
das tut. Schön und prägnant auf die Klarheit der in der Natur. Mit Pipelines und Streams verbringen
wir weniger Zeit damit, zu sagen, wie wir Dinge machen, und konzentrieren uns einfach auf das, was wir tun wollen. Mit diesem deklarativen Stil sind
sie einfacher zu bedienen und erklären die extrem mächtigen. Also, das sind die Männer Funktionen in Java Rate. Aber zusätzlich zu diesen, war
es notwendig, einige andere Funktionen und Konzepte zu haben, um in der Lage zu sein, alles
gut zusammen funktionieren zu können. Mit anderen Worten, nicht den vorhandenen Legacy-Code zu brechen. Was verbessert es, um die neue,
funktionale Art und Weise zu bieten, Dinge zu tun? Jetzt haben wir das, was ich die anderen Merkmale von Jarve nenne. A. Diese sind wie der Klebstoff, der es alle zusammen zeigt, um Probleme und funktionell insbesondere mit der Änderung der Stream besten Operationen, die wir gerade erwähnt haben, zu problematisieren. Wir wollen uns nicht darum kümmern müssen, das Finale dort drin zu überprüfen. Optionals bieten eine ordentliche und ordentliche Art, damit umzugehen. Es gibt ein optionales zp oy, das am besten eine Art Art und Weise bietet, die gefürchtete oder
Zeigerausnahme zu verhindern , die natürlich in einen funktionalen Kontext passt. In der Tat
gibt es eine ganze Luft p, die ich um dieses optionale Konzept geschrieben habe, was bedeutet, dass Sie nicht nur mit der Stream-Programmierung auf funktionale Weise umgehen können, sondern auch einige nette funktionale Dinge mit Bedingungen tun können, unter anderem weiterzumachen. Wir haben Standardmethoden, die es ermöglichen, Implementierung innerhalb einer Schnittstelle aufgerufen zu definieren. Jetzt klingt das ein bisschen widersprüchlich. Schließlich sind
wir an Schnittstellen gewöhnt, die nur öffentliche abstrakte Methoden und keine Implementierung haben. Aber es ist kein Fehler. Es existiert wirklich. Und es ist eigentlich eine elegante Art, eine Schnittstelle zu entwickeln, die in Zukunft ist, ohne bestehende Implementierungen
zu brechen. Dies ist etwas, das benötigt wurde, um Java Acht Stream beste Programmierung über
alle Sammlungsklassen zu erleichtern . Wir haben auch statische Methoden und inter vs, auf die wiederum Implementierung bereitstellen, sind aber nicht spezifisch für eine Instanz einer Schnittstelle. Es ist also ein guter Ort, um
zum Beispiel Hilfsmethoden zu setzen , die dorthin gehören könnten. Schließlich, zumindest in Bezug auf Sprache,
wichtige Merkmale, wichtige Merkmale, haben
wir Methodenreferenzen. Diese werden wahrscheinlich zu einer Methode ernannt, indem sie nur ihren Namen angeben. Dies ermöglicht es uns, bestehende Methoden, die wir in funktionalen Kontexten haben, wiederzuverwenden, indem wir sie
wie Lambda Expressions behandeln und sie an den gleichen Stellen verwenden. So zum Beispiel können
wir
zum Beispielvorhandene Methoden mit diesen übergeben und in unsere
Sammlungsverarbeitungs-Pipelines eingesteckt werden. So gab es eine kurze Zusammenfassung der wichtigsten Features in der nächsten. Einheiten werden jedes Detail betrachten, um zu sehen, wie es eine Rolle in der Arbeit spielt. Eine Landschaft. Es ist eine Menge zu nehmen und erwarten Sie nicht, dass Sie verstehen, auch ein Bruchteil davon aus kurzen Überblick wird in den späteren Videos ins Detail graben, diesem
kurzen Überblick wird in den späteren Videos ins Detail graben,
aber das war nur, um Ihnen einen Test zu geben, was kommen wird.
5. 05 Behaviour mit Lambda: also haben wir Job acht, die den mutigen und aufregenden Schritt
machen, um funktionale Programmierung in die Plattform einzuführen. Das bedeutet, dass Funktionen jetzt zu erstklassigen Bürgern in der Sprache geworden sind. Um zu klären, was das bedeutet, könnten
sie bei der Rückkehr von Methoden übergeben werden, die in Variablen auf modifizierten gespeichert sind, genau wie Job von Primitiven und Objekten Camp. Um dies zu unterstützen, führt
Java ein neues Konstrukt ein, mit dem Funktionen definiert werden können. Wenn Sie diese Funktionen in Variablen speichern und sie weitergeben,müssen
Sie eine Möglichkeit haben, sie tatsächlich zu erstellen. Wenn Sie diese Funktionen in Variablen speichern und sie weitergeben, So können
sie in Java mit diesem neuen Konstrukt erstellt werden, das nur für diesen Zweck eingeführt wurde. Dies ist der Lambda-Ausdruck, während wir überwiegend Daten um die No System Packaging Funktionen, ein Pinto Lambda Ausdrücke erlaubt es uns, Verhalten zu übergeben. Lassen Sie uns einfach einen kurzen Blick auf den Weg werfen. Wir sind bereits daran gewöhnt, Verhaltensweisen zu übergeben. Das häufigste Szenario, das an unsere Event-Listener erinnert. Dies ist, wo Sie übergeben anfallen als Antwort auf ein Tastendruck ausgeführt werden, zum Beispiel. Dies ist üblich in Swing und Android. Durch Aktion, Zuhörer klicken Zuhörer etcetera als nächstes haben wir vergleichende. Hier erstellen Sie eine Klasse, die weiß, wie man mit Objekten desselben Typs vergleichen kann, die eine Reihenfolge zwischen ihnen definiert. Sie können dies dann an eine wunde Routine übergeben, die es verwendet, um die Elemente in Übereinstimmung mit dem Vergleich zu ordnen. Dann haben wir die verschiedenen Filter, die wir implementieren könnten, zum Beispiel, von Dateinamenfilter, die eine Liste von Dateien filtern können. Es gibt
auch viele andere Fälle, auch viele andere Fälle, in denen wir Verhalten weitergeben, aber das sind einige häufige, mit
denen Sie wahrscheinlich bereits vertraut sind. Darlehensausdrücke ermöglichen es, Operationen wie diese sehr prägnant auszudrücken, mit der minimalen Menge an Code. Dies führt zu funktionalen Koenen Job acht. Da wir sehr kompakt und elegant sind, wie wir dies demonstrieren werden, erinnern
wir uns daran, was wir tun müssten, um eine Schaltfläche zu erhalten, um auf ein Klick-Ereignis
in Swing vor Java zu reagieren . Acht. Zuerst müsste
ich eine schnelle Klasse erstellen,
die die Methode hat, die wir ausführen möchten, wenn auf die Schaltfläche geklickt wird. Dies ist unser Ereignis-Handle aufgetreten. Swing off war die Action-Listener-Schnittstelle dafür auf. Wir können hier sehen, dass wir diese Schnittstelle implementieren, so dass wir das Verhalten eins ausschließen können. Dann haben wir diese Klasse nicht so gestanzt, dass wir das resultierende Objekt in die
Methode übergeben können , die Ereignishandler registriert ist. Dies ist die Aktion, die mit ihm auf Jay Button ausgeführt wird. Obwohl es ziemlich einfacher Code ist, ist
es immer noch relativ nicht trivial, alles zusammenzufassen. Schließlich wollen
wir nur die Methode mit einer Zeile ausführen und wir müssen eine Klasse zur Verfügung stellen die die Aktion ist. Der Grund dafür ist, dass vor Job acht auf dem Umfang
Objekte an Methoden übergeben werden konnten, also war das Beste, was wir dann tun konnten, ein Objekt zu übergeben, das den Kern hatte, aber die Methode, die wir
ausführen wollten . Wir könnten dort in weniger Leitungen verdichtet werden. zum Beispiel nicht brauchen, Wenn wirzum Beispiel nicht brauchen,dass der Ereignis-Listener eine andere u i-Komponente verwendet wird, dann könnten wir die Klassen Anonymous definieren und sie in der Zeile in den Aufruf für die
Anzeigenaktionsliste übergeben . Die Methode wie
diese, das spart, besteht darin, einen zusätzlichen Job,
eine Quelldatei,
nur ein Haus,
unseren Event-Handler zu erstellen eine Quelldatei, nur ein Haus, . Aber letztendlich müssen wir noch viel Mut schreiben, etwas zu tun, was
ganz einfach sein sollte . Jetzt ermöglicht es uns Java acht, Verhalten in Form von Lander-Ausdrücken sehr
prägnant zu übergeben , ohne das Gepäck, eine Instanz erstellen zu müssen. Sehen Sie es einen Container oder eine schnelle Klasse, wie wir es vorher gesehen haben. Hier ist das äquivalente Beispiel in Job acht Code hier. Wir haben gerade die Funktion übergeben, die der Landerausdruck ist, an die Methode, und das ist alles, was wir brauchen. Wie Sie sehen können, erlauben uns
Lunder Ausdrücke, eine Menge von Boilerplate Code auszuschneiden, da Funktionen jetzt erstklassige Bürger in der Sprache geworden sind,
und dies ist der Schlüssel, um uns zu ermöglichen, funktionale Programmierung sehr sauber zu machen und prägnant auf dem Job der Plattform in der nächsten, Videos werden in die Definition unserer eigenen unter Ausdrücken und sehen, wie sie zu verwenden.
6. 06-Lambda-Ausschnitte Syntax und Beispiele: in diesem Video werden
wir uns ansehen, wie wir unsere eigenen Lambda-Ausdrücke erstellen können. Lassen Sie uns jetzt die Sensex von Lambda Ausdrücke untersuchen, damit wir sie benutzen können. Unter Ausdruck besteht meist aus drei Teilen Parametern, die Eingaben für die
Funktion definieren , gefolgt von einem Pfeiloperator, der auf den Funktionskörper zeigt
, der ein einzelner Ausdruck auf mehrere Anweisungen sein könnte. Ein solcher allgemeiner ehemaliger ist so, aber es gibt Varianten, um den Sensex exklusiv zu machen. Das, wie wir sehen werden. Es ist einfacher und intuitiver, Beispiele von Lander-Ausdrücken zu sehen, um
die Syntax und ihre Variationen zu verstehen . Schauen wir uns jetzt einige Beispiele an. Dies ist ein Lambda, der nimmt noch Parameter hat keine Eingaben auf Prince. Eine Nachricht an die Konsole. Da es keine Parameter benötigt, haben
wir leere Klammern im Pam's Block. Das ist das Gebot vor dem Pfeiloperator auf müssen diese immer zur Verfügung stellen, obwohl die Funktion keine Eingabe nimmt. auch Da der Funktionskörper nur eine einzelne Anweisung ist, müssen
wirauchkeine umgebenden geschweiften Klammern angeben. Vergleichen Sie das mit diesem Beispiel hier haben wir mehrere Anweisungen im Funktionskörper,
der das Bit nach dem Pfeiloperator ist, und so brauchen wir sie hier. Also, wenn Sie mehrere Anweisungen haben und Sie nicht nur einen Wert zurückgeben oder
etwas Einfaches tun , indem
Sie einen einzigen Liner sagen, müssen Sie den Körper des Lambda in geschweifte Klammern einschließen. Es ist genau wie mit wenn sonst Blöcke, wirklich, wenn wir mehr als eine Aussage in der F brauchen, oder wir brauchen sie
auch dort, auch dort, also sollte nichts so seltsam fühlen. Hoffentlich bisher haben
wir
bishernur einfache Kreditgeber gesehen, die keine Argumente nehmen oder die Werte zurückgeben eine Kerbe aufheben. Wir können auch Eingaben unter Ausdrücken übergeben . Dieser Lunder-Ausdruck nimmt zwei Enden an und multipliziert sie. Es gibt auch den Wert zurück. Obwohl dies in der Syntax im Allgemeinen nicht
explizit ist, wird akzeptiert, dass Lambda einen Wert zurückgeben kann oder nicht, um anzugeben, dass dies
seit Akt Smart-Regel gemacht hätte , um damit umzugehen, sich wahrscheinlich etwas seltsam anfühlt. Sie wissen, dass wir keinen Rückgabetyp angeben, aber es ist nur so, wie es ist. Tragen Sie das nicht. Sie werden sich bald genug daran gewöhnen. sehen Sie auch, In diesem Beispielsehen Sie auch,dass Parameter in der Parameterliste
bezüglich der Eingabeparameter durch Commerce getrennt sind . Nicht, dass die Zeiten tatsächlich optional sind und nicht angegeben werden müssen, wenn der Compiler weitere Typen basierend auf der Verwendung des Lander-Ausdrucks verwendet werden. So könnten wir auch die Typen der Eingabeparameter wie in diesem Beispiel zugeben, die beiden Parameter A und B un mit ihren Typen vorangestellt sind. In diesem Beispiel sind
die Typen immer optional, wenn der Compiler für sie ankommt. Je nachdem, wie der Lander-Ausdruck verwendet wird, ist die Syntax ziemlich unkompliziert und intuitiv, wie Sie sehen können. Natürlich
haben wir die Situation, in der wir drei Parameter haben, nicht behandelt. Zwei von ihnen sind Strings, und eine ist eine Ganzzahl, und es wurde zu verdoppeln zurückgegeben. Aber Sie können wahrscheinlich herausfinden, wie Sie das so schreiben können, wie Sie die Typen geben
oder getan möchten . Sie müssen sich keine Sorgen um den Rückgabetyp machen, und müssen nur dann herausfinden, ob Sie geschweifte Klammern herumlegen müssen. Aber wenn es ein mehrzeiliger Codeblock ist, also Kreditausdrücke nett, leicht und einfach zu bedienen, können
Sie sie nicht beim Ausführen verwenden. In der Tat, wenn Sie nur kopieren, fügen Sie diese Ausdrücke, die wir in eine Idee gingen, so
wie es erwartet wird, zu kompilieren. Es wird noch nicht funktionieren, und das liegt daran, dass sie nicht einfach auf der Flucht existieren können. Sie müssen entweder in einer Variablen oder Pastore Methode gespeichert werden, und um zu sehen, wie dies zu tun ist, müssen
wir funktionale Schnittstellen und Zieltypen verstehen, was in den nächsten Videos tun wird, also bleiben Sie bei uns.
7. 07 Eine Einführung in funktionelle Schnittstellen mit Beispielen: funktionalen Schnittstellen oder ein neues Konzept in Java acht eingeführt, um die Verwendung von
Lambda-Ausdrücken zu unterstützen . Also, was genau sind sie? Nun, eine Funktion wird in Form eines Lander-Ausdrucks ausgedrückt. Dies ist die Kapselung des Funktionscodes in ein Formular, das an eine Methode übergeben werden könnte . Rückkehr von der Methode oder einer Variablen zugewiesen. jedoch Java istjedocheine stark typisierte Sprache mit einem strengen Typsystem,
und alles, was wir Passel Return speichern, erfordert einen gut definierten Typ. Dies bedeutet, dass wir eine Möglichkeit brauchen, eine Zeit unter Ausdrücken fiel auf dies ist genau das was funktionale Schnittstellen tun. Sie stellen die Referenztypen für Lander-Ausdrücke bereit. Hier ist ein trivialer Lander-Ausdruck. Es benötigt keine Eingabeparameter und druckt nur eine Nachricht an die Konsole. Nehmen wir an, wir wollen diesen Lander aufbewahren. Ausdruck in einer Variablen oder Placid ist ein Parameter für eine Methode, aber mit der Referenz Tybee, die wir verwenden würden, stellt
sich heraus, dass wir ein paar verschiedene Typen verwenden könnten. Aber aus Gründen des Arguments, wird dieses verwenden,
das die Idee der Ausführung eines Stückes Code kommuniziert, wie es mit neun Puts oder Rückgabewert der vermietbaren. Jetzt verbinden wir normalerweise die erneuerbare Schnittstelle mit dem Ausführen von Bedrohungen, aber wie wir sie hier verwenden, hat nichts damit zu tun. Es ist nur eine funktionale Schnittstelle, die zufällig ein kompatibler Zieltyp für den Kreditgeber Ausdruck gegeben wurde. Wir werden in einem Moment darauf zugreifen, welche funktionalen Schnittstellen wirklich sind, und wie wir sie definieren, wird all dies erklären. Aber für jetzt, einfach mit dem Beispiel hängen und in keine Gedanken über Multi-Threading geben weil es nichts damit zu tun hat. So können wir erneuerbar als unseren Referenztyp auf der Kompilierung verwenden. Es wäre glücklich. Dies liegt daran, dass die Methodensignatur der run -Methode in winnable mit der implizierten
Methodensignatur des Lander-Ausdrucks übereinstimmt . Mit anderen Worten, es nimmt keine Importargumente für die Funktion bei Rückgaben. Kein Wert. Nicht, dass wir jede kompatible Methode verwenden können. Es ist in einer funktionalen Schnittstelle definiert. wir
beispielsweise beispielsweise Wennwir
beispielsweiseeine Funktionsschnittstelle wie diese definiert hätten, könnten
wir dieser Referenz auch denselben Landerausdruck zuweisen. Geben Sie zwei ein. Das ist also auch legal. Dies ist ein kurzes Video, das einige wichtige Punkte hat, die wir betonen sollten Funktion Interfaces existieren, so dass die Lander-Ausdrücke an einen Typ gebunden werden könnten, der als Zieltyp bekannt ist. Es könnte viele verschiedene gültige Typen geben, die ein Lander-Ausdruck bouncer sein könnte. Alles, was erforderlich ist, ist, dass die Methodensignaturen kompatibel sind. Sind Sie da außer der gleichen Eingabe und geben den gleichen Typ zurück? Sie sind der Kleber, wenn Sie möchten, die Lander-Ausdrücke erlauben, einen Typ in Java zu haben. Jetzt ist das großartig. Sie wissen jetzt, warum wir Funktionsschnittstellen haben, aber das lässt immer noch ein paar Fragen. Wie finden wir funktionale Schnittstellen, auf denen wir verwenden können? Was ist, wenn man noch nicht existiert? Können wir uns selbst ausmachen? Nun, sind große Fragen zu beantworten diese in den nächsten paar Videos auch.
8. 08 zur Auswahl von Compatible Zieltypen: da Job eine stark typisierte Sprache ist, in der alles einen Typ haben muss. Lunder Ausdrücke sind ebenfalls erforderlich, um einen Typ zu haben. Nun kommen hier Funktionsschnittstellen in das Bild über die Idee von
Funktionsdeskriptoren . Lassen Sie uns jetzt einen kurzen Blick zusammen werfen, worum es hier geht. Ein Kreditgeber Ausdrücke wie diese hat eine implizite Methode. Unterschrift. Schau dir die Syntax an. Wir können sehen, dass dies unter Ausdruck zu intensiv A und B bei Renditen dauert. Dies bedeutet, dass diese implizite Methodensignatur eines Lander-Ausdrucks besser als
Funktionsdeskriptor bekannt ist . Der Funktionsdeskriptor ist nur eine beleidigende Art zu sagen, welche Typen als
Eingabe für welchen Typ er seine Ausgabe zurückgibt. Es ist die Methodensignatur, wenn Sie so wollen, ohne die Methode in ihnen. Jetzt werden
13 Deskriptoren nicht in Java-Code verwendet. Es ist nicht wie eine Syntax-Sache oder so. Sie deklarieren keine Funktionsdeskriptoren oder so etwas. Es ist also nicht etwas, auf das Sie wahrscheinlich während der Datenentwicklung in Java acht stoßen. Aber die unsere nützliche Art, über Typen nachzudenken, und sie verwendeten hinter den Kulissen beim Kompilieren des Codes,
aber dennoch das Nützliche, das bei der Betrachtung von Arten von Darlehensausdrücken berücksichtigt werden sollte. Das ist das Wichtigste hier. Lassen Sie uns nun einen Blick auf einige Beispielfunktions-Deskriptoren werfen. Hier ist eine, die keine Eingaben annimmt und nichtig zurückgibt. Diese Funktion wird geswept. Es würde mit einer Venable-Schnittstelle übereinstimmen. Zum Beispiel, da die in der Schnittstelle definierte Methode keine Argumente annimmt und nichts zurückgibt, schauen wir uns einfach eine schnelle Auffrischung dieser erneuerbaren Schnittstelle an. Sie können sehen, dass es keine Argumente braucht. Es gibt nichts in den Klammern nach der Methode. Sie und dann Rückgabetyp ist in der Tat ungültig,
was bedeutet, dass es nichts zurückgibt. Also passt es definitiv zu der Funktion. Neuer Strip, zum Beispiel. Wir sahen gerade diese Funktion Deskriptive nimmt Parameter auf Returns zu bestehen und im Rücken könnte
man sich einen Lander-Ausdruck vorstellen
, der eine Anzeigenoperation toe durchführt und zusammen einführen, dass dies jetzt für das vorherige Beispiel hat. Es war ziemlich einfach, an eine Schnittstelle zu denken, die für diese passen würde, obwohl Vielleicht ist es eher eine Herausforderung, eine in der vorhandenen zu finden. Jenny kam Nun, es wäre vor Job acht sein, aber zum Glück, diese Veröffentlichung Schiffe mit einer ganzen Sammlung von nützlichen. Lassen Sie uns nennen, starten Sie eine funktionale Schnittstellen, die Sie verwenden können. Also in der Tat gibt es eine Schnittstelle, die dies bereits zu Java Acht kennt. Eine Schnittstelle, die zwei Elemente desselben Typs annimmt, wendet eine Operation auf sie an, um ein Ergebnis zu erzeugen. Der gleiche Typ ist als Operator bekannt, so Java acht bietet die inbinäre Operatorschnittstelle für dies hier gezeigt hat, können Sie sehen dass es tatsächlich braucht, um zu wince auf gibt wieder ein Ende, das dem Beispiel Funktionsbezirk entspricht . Also haben wir gerade gegeben Jetzt ist dies unser letztes Beispiel. Es zeigt eine Funktion, die keine Argumente auf erzeugt eine Zeichenkette seinen zurückgegebenen Wert wieder Jarve acht funktionale Schnittstellen kommen zur Rettung Angebot, was als Lieferant bekannt ist. Dies ist eine funktionale Schnittstelle, die einen Wert zurückgibt. Java ist ein paar von diesen, zum Beispiel, von boolescher Versorgung wird ein boolescher Wert doppelter Lieferant gibt einen doppelten Wert zurück und so
weiter . Also würden Sie wahrscheinlich einen Stringlieferanten erwarten, und das würden Sie sicherlich tun, wenn alles, was wir jemals getan haben, richtig wäre. Hallo Welt-Programme. Aber für die Stärke er müssen wir ein bisschen mehr Arbeit machen und die generische Schnittstelle verwenden. Aber es ist nützlich, einen kurzen Blick zu werfen. Dies ist eine Lieferantenschnittstelle, die Sie sehen können, dass es keine Parameter annimmt und nur den Wert
des Parametertyps zurückgibt , der in unserem Fall ohnehin eine Zeichenfolge
wäre. Wir wollen nicht anfangen zu rennen, bevor wir dorthin laufen können, also lasst uns nicht mit Generatoren abgelenkt werden. Für den Moment. Der entscheidende Teil ist, dass ein Landerausdruck durch einen Funktionsdeskriptor beschrieben werden kann, auf dem ein Funktionsdeskriptor möglicherweise vielen verschiedenen Schnittstellen entsprechen kann. Natürlich werde
ich eins benutzen, aber es ist überreicht, um das im Sinn zu haben. Es ist nicht nur so, als gäbe es nur eine Schnittstelle, die man nie eine Art von Lander-Ausdruck
oder irgendetwas verwenden kann, also bringt uns das zum nächsten Punkt. , Um festzustellen,ob ein Darlehensausdruck in eine funktionale Schnittstelle eingegeben werden kann, betrachten
wir die funktionalen Deskriptoren beider Elemente. Wenn die Funktionsdeskriptoren kompatibel sind
, kann der Landerausdruck dem Typ der funktionalen Schnittstelle zugewiesen werden. Technisch gesehen darf
der Darlehensausdruck einen Zieltyp von der funktionalen Schnittstelle haben. So haben wir jetzt eine Funktionsdeskriptoren gesehen und wissen, dass sie bis zu zwei Jahren nützlich sind, wenn man bedenkt, welche Typen wir für Lambda Expressions verwenden können, und wir haben auf
Funktionsschnittstellen berührt . Hoffentlich funktionieren
diese drei Eckpfeiler Konzept Lambda Expressions Deskriptoren in funktionalen Schnittstellen. - Pop. Alles fängt an, sich jetzt an,
wahrscheinlich langsam auf den ersten Platz zu klicken . Es gibt eine Menge zu nehmen,
also mach dir keine Sorgen, wenn du noch nicht ganz da bist,
aber du solltest jetzt in also mach dir keine Sorgen, wenn du noch nicht ganz da bist, der Lage sein, ein gutes Gefühl dafür zu haben, wie sie verwandt sind, und wir werden mehr davon in Aktion sehen, wenn der Kurs fortschreitet.
9. 09 Eine Übersicht über Streams, Fortgeschrittenes und Intermediate: So haben wir gesehen, dass die Kernsprache Java unterstützt. AIDS bietet seine Funktionen zum Schreiben und Handling an, namentlich Lambda Expressions und funktionale Schnittstellen. Jetzt, da wir das gesehen haben, ist
es an der Zeit, unsere Aufmerksamkeit auf eine neue Einführung in die Java A-Plattform zu lenken. Und das sind die Streams FBI, die Streams. FBI ermöglicht es Ihnen, Sammlungen auf eine funktionale Weise zu verarbeiten. Schließlich gingen
die Sprachdesigner große Anstrengungen, um uns zu ermöglichen, Funktionen in unserem
Job zu verwenden aufgetreten auf. Es ist also jetzt vernünftig, dass wir diesen glänzenden,
kornu-deklarativen Programmierstil in unserem vorhandenen Code verwenden können . Und es gibt keinen besseren Ort unseren Platz mit größeren Knall für den Dollar,
wie es war, dass auf einem Spiel alles, was gut zu tun,
funktional, funktional, sauber und prägnante Karte Zeug. Dann, wenn wir mit Sammlungen arbeiten, die Sammlungen FBI natürlich etwas,
mit dem wir täglich gearbeitet haben . Mit anderen Worten, wir können jetzt Funktionen anwenden richtig sein oder sogar Funktionen, die bereits existieren, um die Sammlung auf
manipulieren zu können . Wir tun dies, indem wir diese Funktionen in eine so genannte Pipeline stecken, was es in einer
Sekunde darauf ist,
aber wissen Sie Sekunde darauf ist, nur, dass die große Überschrift hier ist, dass das Streams FBI eine sehr saubere und
prägnante Art bietet , besser in einem funktionelle Waren. Wir werden in Kürze sehen, übrigens, nicht es ist absolut mit der Verarbeitung von Sammlungen zu tun. Das ist sein einziger Zweck. Wenn Sie an die Streams MP denken, verknüpfe
ich automatisch in Ihrem Kopf mit Sammlungen. Es hat nichts mit den Iowa P I und Java zu tun, die für wichtige Ausgabe durch
ihre Klassen dort verwendet werden , mit Namen wie Input Stream und Output Stream. Wenn wir über die i o A.
P sprechen , Ich werde mich auf Stream-basierte IR beziehen. Aber es gibt nichts im Java Acht Streams FBI, was mit denen zu tun hat, die sie nur zufällig den gleichen Begriff gemeinsam verwenden. Denken Sie daran, Java acht Streams dort p I entspricht der Verarbeitung von Sammlungen auf eine funktionale Weise. Also, jetzt haben wir das deutlich gemacht. Werfen wir einen Blick darauf, welche Streams tatsächlich sind. Was genau ist der Stream? Nun, ein Stream ist eine Sequenz von Elementen aus einer Quelle, die es ermöglicht, mehrere Funktionen darauf anzuwenden, indem Operationen in eine Pipeline verkettet werden, die die Daten in
irgendeiner Weise verarbeiten kann . Es ist wichtig zu beachten, dass der Stream keine Datenstruktur wie jede der Job-Sammlung ist. Die Klassen sind. Mit anderen Worten, es erlaubt Ihnen nicht, die Elemente aufzuhalten, sondern sie irgendwo zu verarbeiten. So die Ströme AP oy ermöglicht es uns, Operationen zusammen auf unsere Funktionen zu verketten, Anwendung auf die Sammlung der verschiedenen Stufen in dieser Kette diese Kreis-Pipeline. Diese Operationen, die in diese Pipeline miteinander verkettet waren, sind von zwei Arten. Es sind Zwischenoperationen und Terminaloperationen. Nun besteht eine Pipeline aus typischerweise einem oder mehreren in einigen Medienoperationen, die zusammen mit einer Terminaloperationskette bis zum Ende verkettet sind. So Zwischenprodukte, Zwischenprodukte, Zwischenprodukte Terminal. Stellen Sie sich vor, dies wäre ein einfacher Punkt für ein Beispiel, so dass wir sehen können, dass es wirklich die Zwischenoperationen sind, die den laufenden
funktionalen Verarbeitungsmechanismus bereitstellen . Schließlich beendet
der Terminalbetrieb nur die Pipeline. Es ist Terminal ist es am Ende, so dass wir sehen, dass durch diese Pipeline Schulden zweiten Stock zwischen Operationen. Daher das Wort Stream. In der Tat, weil es das ist, was ein Stream ist, es ist ein direktionaler Fluss von Daten. Das ist also ein Fluss zwischen diesen Operationen, die in irgendeiner Weise von Funktionen auf
dem Weg verarbeitet werden. Diese Verkettung über Zwischenoperationen wird durch diese Zwischenoperationen erreicht, immer einen Verweis auf den Strom zurückgeben
, der den Mechanismus bereitstellt, die Konstruktion einer Pipeline ermöglicht. Wir werden das später sehen, wenn wir uns das FBI genauer ansehen. Ein weiterer interessanter Punkt ist, dass
FBI-Designer durch die Trennung der Operationstypen in Zwischen- und Terminalströme Java acht Streams faul evaluiert haben. Es gibt die Auswertung bedeutet, dass eine Zwischenoperation nicht tatsächlich ausgewertet wird, bis eine Terminaloperation am Ende der Kette erreicht ist, so dass sie in dieser Hinsicht faul sind. Eine Klemmenoperation
ist
jedoch, jedoch, dass die Operation tatsächlich die Auswertung der Pipeline auslöst, d. h. der Vorgänge vor dem Klemmenbetrieb. Dadurch, dass dieser letzte Schritt die Bewertung der Pipeline ausgelöst hat, konnte
die Pipeline selbst sogar optimiert werden. Das passiert eigentlich hinter den Kulissen. Für uns ist
dies ein ziemlich abstraktes Konzept, das über den Rahmen dieses Kurses hinausgeht. Aber natürlich verbirgt die Streams DePuy all diese Komplexität vor Ihnen und bietet nur
Leistungsvorteile ohne zusätzliche Kosten. An diesem Punkt wäre
jedoch jedoch ein Beispielcode gut zu betrachten, da dieses Pipeline-Zeug ziemlich oben in der
Luft klingt . Also lasst uns es auf die Erde bringen und es zusammen in den Griff bekommen, was im nächsten Video tun wird.
10. 10 Understanding: Jetzt haben wir gerade den Überblick über Pipelines und Streams durchgemacht. Ich schätze, wie abstrakt das gesehen werden muss. Also danke, dass du das durchgekommen bist. Und es war nicht einfach. Lassen Sie uns jetzt einspringen und einen Code einleiten, damit wir einen richtigen Griff bekommen können, was es bedeutet. Hier ist eine Beispielpipeline, die einen Strom einiger Strings erstellt. Es tut dies, damit sie mit den Streams verarbeitet werden können. Vom FBI. Das ist es, was der Streamed es tut. Es erstellt einen Strom, den wir funktionale Operationen auf einer Pipeline durchführen können zu verarbeiten. Die Tage waren in irgendeiner Weise, also haben wir diesen Strom von Saiten an. Mit dem hier. Wir können es verarbeiten, indem wir alles nutzen, was die Streams, FBI-Büros, die in Kürze abdecken werden. zunächst aufschlüsseln, Lassen Sie unszunächst aufschlüsseln,was in dieser Kohle passiert, obwohl das erste, was dieser Stein mit dem Strom ist, eine Kartierung zu machen. Dies ordnet eine Zeichenfolge im Stream zu seiner Großbuchstaben Version zu. Sie sind alle Stream-Operationen, oder besser gesagt, alle Zwischenstream-Operationen geben einen Stream zurück, wie wir bereits gesagt haben. Dies bedeutet, dass wir weitermachen können und mehr Stream-basierte Verarbeitung nach dieser Karte -Operation. Als nächstes die obere Pflegezeichenfolge durch eine Filtermethode geleitet. Das filtert heraus. Viele Strings haben eine Länge von genau fünf Zeichen. Dann wird eine Sortierung auf den Stream angewendet. Zurück von dieser Filtermethode auf. Schließlich wird
der Stream mit einer Terminaloperation verarbeitet, die in diesem Fall Schleifen über jedes Element im Stream den Wert ausgibt. Es ist viel los hier,
aber die wichtigsten Punkte, die zu beachten sind, sind, dass wir mit dem Stream beginnen müssen, um die
Streams verwenden zu können , die über die Stream-Schnittstelle verfügbar gemacht werden. Dann verketten wir Operationen effektiv zusammen, um eine Pipeline zu bilden. Diese Verkettung ist möglich, da Zwischenoperationen jedes Mal einen Strom zurückgeben, wenn diese kalt . Dann erhalten
wir am Ende der Pipeline die tatsächlichen Daten. Und so tun wir dies, indem wir die Pipeline mit einem Terminalbetrieb beenden. Diese Studie bewertet die Pipeline auf Renditen, die Ergebnisse, um wieder zu unserem Beispiel zurück zu gehen, das wir zuvor gesehen haben. Sie wissen, dass die Zwischenoperationen einen Lander-Ausdruck annehmen. Mit anderen Worten, der Funktion. Dies ist, wo der funktionale Aspekt hineinkommt, und so wird jede Operation in der Pipeline effektiv angewendet, um auf die Elemente
des Streams zu funktionieren , um seine Verarbeitung durchzuführen. Das wirft natürlich die Frage auf. Was ist der Typ des Landers, der für jede Operation übergeben wird? Im Fall der Map-Zwischenoperation nimmt
dies also eine Funktion von string zu string. Denken Sie daran, eine Funktion nimmt eine Eingabe auf Rückgaben, eine Ausgabe. In diesem Fall dauert
es eine Zeichenfolge und gibt eine Zeichenfolge zurück. Im Falle des Filterbetriebs wird ein Pritikin benötigt. Würden Sie es schätzen, um eine String-Eingabe zu einem Bully zu erstellen und effektiv ein Tor zu bilden , durch das
Elemente passieren sollen? Schließlich nimmt
für jeden einen Verbraucher von String, Funktion, die eine Zeichenfolge übergeben werden könnte und etwas damit tun, was in diesem Fall übergeben wir im Überfluss. Instanz mit Bezug auf die Drucklinien-Methode aus System toe out, die wiederum Prinzen zwei Saiten eins nach dem anderen auf die Konsole. Jetzt haben wir die grundlegende Operation eines einfachen Punktplans gesehen. Werfen wir einen Blick darauf, wie wir tatsächlich Streams an erster Stelle erstellen können, so dass Sie einen Stream auf zwei Arten
erstellen können , entweder indem Sie die Stream-Methode für eine Auflistungsklasse aufrufen, die auf Listen und Sets beschränkt ist, oder
indem Sie einen Stream aus ein Array mit abgestreamt. Jetzt habe ich gesehen, dass Sie auf die Listen und Sets streamen können. Du denkst wahrscheinlich, was ist mit Karten? Und das ist ein guter Punkt. Sie können diese immer noch am besten verarbeiten. Sie tun das einfach durch, sagen wir, an einer der Methoden der Karte
arbeiten, die einen Satz zurückgibt, zum Beispiel eine
solche neue Stream-Verarbeitung bei allem Interesse an einer Karte, zum Beispiel Sie können stream aus der Menge aufrufen, die erzeugt wird, wenn Sie die Interessen dieser Methode auf der Karte aufgerufen haben. Eine Sache,
die darauf hinzuweisen ist,
ist
in der Tat ziemlich cool , dass Standardmethoden in Java acht zum alleinigen Zweck eingeführt wurden, bestehende Sammlungsklassen eine Stream-Methode
hinzufügen zu können , ohne Implementierungen. Das ist also die große Idee hinter der Standardmethode. Genau dort in Aktion, können
Sie das Video auf Standard-Methode überprüfen, so dass sie oder über die auf die Ideen hinter ihnen später. So können wir jetzt einen Stream erstellen. Was können wir damit machen? Oder wir haben eine ganze Reihe von Methoden, die auf der Stream-Schnittstelle auf diesen verfügbar sind werden auf den ersten Blick überwältigend erscheinen, aber eine sehr reiche Umgebung bieten, in der wir funktionell übereinstimmten. Mach dir keine Sorgen über die Menge an Methoden und wie entmutigend es aussehen könnte. Es ist ziemlich unkompliziert, wenn man es gewohnt ist. Denken Sie daran, dass wir zwei Arten von Operationen haben. Zwischenoperationen geben jedes Mal einen Stream zurück, so dass wir die Verarbeitung halten und in
Medienoperationen verketten können , um eine Pipeline für Terminaloperationen zu bilden. Sie werden keinen Stream zurückgeben. Stattdessen geben
sie ungültig oder nicht stream-Ergebnis zurück, da auf diese Weise die Pipeline letztendlich ausgewertet wird, um auf Prozessdaten zuzugreifen. Da wir zwei Arten von Zwischenoperationen im Terminal haben,
ist es sinnvoll, die Methoden in der Stream-Schnittstelle nach diesen beiden Operationstypen zu gruppieren. Lassen Sie uns also in Medienoperationen betrachten. zunächst an die Sammlungen denken, Wenn wirzunächst an die Sammlungen denken,auf denen Streams basieren könnten, könnten
wir uns vorstellen, dass eines der wichtigsten Dinge in der Lage sein würde, die
Elemente zu filtern , die die Filtermethode erlaubt. Dies auf filtert tatsächlich den Strom zu den Elementen, die dem Prädikat an ihm vorbei passten. Wir übergeben ein Prädikat, das Rückruf wahr oder falsch zurückgibt, indem das Element
gegen seine Bedingung ausgewertet wird. Als nächstes stellen
wir uns vor, dass wir Elemente von einem Format zum anderen auf der Karte abbilden möchten. Methode ermöglicht es uns, genau das zu tun. Zum Beispiel, wenn wir einen Strom von Mitarbeiterobjekten hatten, könnten
wir zuordnen, um nur die Namen der Mitarbeiter zu erhalten. Es gibt andere Zwischenmethoden dazu. Wir können die am häufigsten sortierte verwenden,
die die Elemente im Stream auf verschiedene sortiert , wodurch alle Duplikate innerhalb dieses Streams entfernt werden. Das war also ein Blick auf die gängigsten Medienoperationen. Nun werfen wir einen Blick auf ein Terminal Operationen. Wie bereits erwähnt, diese keinen Stream effektiv zurück, da die Pipeline, die ausgewertet werden soll, damit wir diese Methoden
sehen können , wirklich die Ergebnis-Site-Methoden sind, die die fertige
Ergebnismenge zurückgegeben haben. Mit anderen Worten, sie werden den Prozessstrom als eine Sammlung fantastische Tage für über die
Elemente des Streams zurückgeben . In gewisser Weise ist
wahrscheinlich die häufigste Sache, die Sie mit dem Prozessstrom tun möchten, die Prozesselemente zu erfassen . Stellen Sie sich vor, wir filtern, Gruppierung
zuordnen. Möglicherweise haben Sie mit einer Sammlung von dem Punkt begonnen, alles so gut zu tun, so dass Sie mit einer anderen Sammlung des Endes enden enden enden würden ,
also würden die gebräuchlichsten Methoden zu einer neuen Sammlung der Streams führen. Elemente sind die beiden Methoden auf der Klasse des Kollektors festgelegt, die eine Menge der Elemente auf Liste zurückgibt, die eine Liste sendet. Das nächste, was in den Sinn kommt, wenn wir darüber nachdenken, was wir aus einem
Prozessstrom bekommen wollen , ist eine Beobachtung über die Elemente im Stream. Um dies zu tun, bestreiten
wir die Elemente im Stream. Und wenn wir daran denken, etwas zu testen, rufen
wir wirklich eine Funktion gegen ein Element auf, das als wahr oder falsch ausgewertet wird. Mit anderen Worten, wir bieten eine praktische, so dass diese Arten von Funktionen nehmen ein Prädikat auf
die Elemente des Streams durchgeführt werden . Alle Übereinstimmung gibt true zurück, wenn alle Elemente im Stream hinter dem angegebenen kritischen, wird
jede Übereinstimmung zu zurückkehren, wenn ein einzelnes Element das kritische passiert. Unweigerlich wird
dies kurzschließen und aus der Iteration ausbrechen, vorausgesetzt, dass das erste Element,
das dem Raubtier entspricht , angetroffen wird. Beschwerdemethoden zu diesen sind auch nicht übereinstimmen, wenn keines der Elemente dem bereitgestellten
Prädikat entspricht. Dies muss offensichtlich alle Elemente in der Sammlung testen, also seien Sie sehr besorgt über diese für große Sammlungen, leistungsweise und erste Übereinstimmung, die Ihnen eine optionale aus dem ersten Element geben wird, das den Raubtier übergeben. Wissen Sie auch, dass dies eine optionale in die Wörter ist, die dies optional leer von
Kein Element zurückgeben könnte , hat eine gute Möglichkeit, die Marina Kraft zu verstehen, was wir hier gesehen haben. Es dauert einige Zeit, um voran zu gehen und einige Sammlungen zu erstellen und etwas Stream besten
Code mit dem Streams Opioid zu schreiben , um sie zu verarbeiten, indem Sie Ihre eigenen Pipelines erstellen. Also in diesem Modul haben wir die Leistung von Pipelines gesehen und Stream beste Verarbeitung mit den Streams verwendet. Wie Sie sehen können, bietet
es eine sehr saubere und lesbare Art der Verarbeitung von Sammlungen, und schon lange werden
Sie auf diese sehr prägnante, elegante und funktionale Art und Weise an die Verarbeitung von Sammlungstypen angepasst .
11. 11 Was ist eine Option, und wie sie verwendet werden: in diesem Video werden
wir einen Blick auf die neue Options-Funktion der Java-Rate haben, die uns eine leistungsstarke neue Art der Arbeit mit Werten, die kommunalen, wie wir sehen, So Java . Es hat diese neue Optionals-Funktion eingeführt, die eine typsichere Möglichkeit bietet, mit möglicherweise Newell-Werten umzugehen. Es ermöglicht uns, mit diesen Arten von Werten elegant und funktionalen Code umzugehen,
ohne auf Boilerplate oder Kontrollen zurückgreifen zu müssen. Weißt du,
diejenigen, wenn solche und solche nicht gleich sind, um bedingte zu wissen, ist, dass wir überall im Job auftreten wenn wir Zugriff auf und Objekte Felder auf Methoden. Nun, wenn Sie darüber nachdenken, wie Sie das für einen Moment tun könnten, ist
es nicht sofort offensichtlich, wie wir verhindern können, dass wir diese keine Kontrollen durchführen müssen, da sie in unserem heutigen Entwicklungsstil so tief verwurzelt sind. Aber sobald Sie das optionale FBI in Aktion sehen, werden
Sie sehen, dass es ganz einfach zu verstehen ist. Und vor allem wird es Ihren Code sauberer lesbarer und allgemein schöner zu arbeiten machen. Lassen Sie uns jetzt einen Blick zusammen werfen. Es ist nützlich, einen schnellen Rückblick auf die nil-Handhabung vor Java acht zu haben, um das optionale FBI
in Kontext zu stellen . Lassen Sie uns ein kurzes Beispiel sehen. Also lassen Sie uns diese Methode hier betrachten. Hier haben wir eine Klassenabteilung, die eine Methode hat, um den Mitarbeiter des Monats zu bekommen. Diese Methode gibt ein Objekt vom Typ Mitarbeiter zurück,
das davon ausgeht, dass der Name der Person dort ist und möglicherweise ein paar der zusätzlichen Elemente, die unser Programm an dieser Methode jeden Monat interessiert sein könnte, können
wir einen Bericht generieren, , die die aktuellen Star-Mitarbeiter wie diese einschließt. Das funktioniert gut, bis wir einen Monat treffen, in dem niemand hart genug gearbeitet hat, um den
Mitarbeiter des Monats Titel zu verdienen , wir am Ende mit einem No Point oder Ausnahme. Als wir versuchten, seinen Namen bei dieser Gelegenheit zu bekommen, Mitarbeiter war bekannt, wie wir alle wissen, wann immer wir versuchen, zu behandeln, Referenz und alle Referenz, anderen
Worten, Zugriff auf ein Feld auf der -Objekte auf der invoca -Methode. Darauf erhalten
wir die gefürchtete oder Zeigerausnahme. Jetzt können wir dies beheben, indem wir ein paar weitere Zeilen hinzufügen und wie folgt nach dem Null suchen. Wenn wir dies tun, wir jetzt sicher, dass die Superstar-Variable definitiv eine gültige Objektreferenz enthält. Bevor wir irgendwelche Methoden dagegen aufrufen. Die Superstars sind gleich kein Ausdruck wird manchmal als Wächter bekannt. Übrigens, nur damit Sie es wissen, da Sie diesen Begriff von Zeit zu Zeit einen Weg zurück zum Code hören
könnten, könnten, ist
der Code mit einer Nullprüfung besser. Nun, zumindest in Bezug darauf, dass es jetzt zuverlässiger ist, werden wir definitiv nicht in allen Punkten oder Ausnahmen kommen, wenn wir dies tun, aber es sind immer noch drei Codezeilen, um etwas ganz Einfaches zu tun. Mal sehen, wie Optionals in Java AIDS die Situation sie jetzt verbessern können. Das Problem mit der Methode, die wir gesucht haben, ist, dass es den Aufrufer nicht zwingt, mit der Tatsache
umzugehen , dass sie möglicherweise kein Wert darin sind. Es gibt keine Warnung an den Programmierer, dass Sie zurückkommen könnten, und nein, in der Tat, wenn Sie darüber nachdenken, die Methodenzuverlässigkeit nur von dem Problem ab, ein guter Bürger für die Überprüfung zu sein. Es ist nicht bekannt, nur für den Fall. Job Right behebt dies, indem Sie ein Objekt und ein optionales umschließen Auf diese Weise müssen
Sie immer das Optionale durchlaufen, bevor Sie zu den guten Sachen innerhalb des
tatsächlichen Objekts gelangen können , so dass wir eine optionale von Mitarbeitern haben könnten, für -Beispiel zurückgegeben
wurde. In diesem hier. Dies bedeutet, dass der Wert der optionalen Wraps entweder von unseren IT-Mitarbeitern obliegt. Oder es enthält eine Newell-Referenz, die das bringt, Ist es Nolan nicht Aspekt in einen tatsächlichen Typ ? Meine E-Klasse zwingt nun den Programmierer, sich mit den beiden getrennten Fällen zu befassen. Auf saubere Art und Weise gibt es keinen Ausweg. Jetzt müssen Sie sich mit der Tatsache beschäftigen, dass es nicht auf explizit aufgetreten ist der Fall, wenn es nicht auf dem Fall ist. Wenn es eine gültige Referenzen ist, werden
wir sehen. Ich weiß auch, dass, weil Sie diese optionale Rapper-Klasse durchlaufen müssen, die das Objekt umschließt, das Sie tatsächlich wollen, es diesen Umgang ohne Werte erzwingt. Jetzt mit einem Kompilierzeit-Level. Dies ist ein schöner Nebeneffekt. Dies bedeutet, dass die unerwarteten Ausnahmen, die Sie verwendet haben, um eine Laufzeit in der Produktion zu erhalten, indem angemessen adressieren, ob ein Wert nein sein könnte oder nicht Diese Ausnahmen werden jetzt zu Kompilierungszeitbedenken, wenn der Compiler selbst eine, die Sie ignorieren Sie es. Das ist wirklich eine gute Sache. Es bedeutet, dass wir am Ende mehr US-Code schreiben werden, um Dinge nicht dem Zufall so viel zu überlassen weil wir jetzt gezwungen sind, mit der Möglichkeit von Wissen explizit umzugehen, also nicht mehr. Ah, ja, ich habe den Scheck vergessen. Es war nein. Wenn Sie in der Produktion sprengen,
vor allem, vor allem, bieten
die Optionals ein Flugzeug für den Umgang mit diesen Nein oder bevölkerten Fällen in einer schönen, funktionalen Art und Weise. Zum Beispiel kann
dieser Pre-Job-8-Code, den wir uns angesehen haben, in Java eleganter geschrieben werden, indem er ihn durch diese funktionellere Version
ersetzt. Das erste Beispiel gibt einen Mitarbeiter zurück, der sich auf das Programm bezieht und daran erinnert, die Null-Prüfungen durchzuführen. Und so ist dies zwingend in der Natur, Erinnern Sie sich an die Imperative Welt Aufnahme explizit. Im zweiten Beispiel wird eine optionale Anzahl von Mitarbeitern auf zurückgegeben. diesem Grund müssen
wir nicht die Null-Prüfungen schreiben, schwächen nur Delegate an das optionale FBI, um uns zu beschäftigen und nur die
Funktion aufgerufen . Beachten Sie, dass dies funktional ist. Es ist mehr deklarativer Stil. Wir sagen nur, was wir geschehen wollen, nicht wie so. Hier ist es tun, wenn es nicht weiß, im
Gegensatz zu überprüfen, ob es nicht ist, noch zuerst, dann tun Sie dies. Es gibt einen subtilen Unterschied, aber es ist schön zu bemerken. So Optionals bringen einen Mitarbeiter an den Tisch, was uns erlaubt, mit Werten zu interagieren, die die Gegenwart in einer sehr sauberen und funktionalen Art und Weise, die gut mit dem Rest des Jobs spielt. Acht Konzepte, wie wir sehen werden.
12. 12 die Optionals: in diesem Video werden
wir sterben weiter zu fördern und werfen einen tiefen Blick auf die Optionen attraktiv. Also lasst uns dran kommen. Wie wir in der letzten Einheit sagten, besteht
dieIdee hinter einer optionalen in Java Acht darin, dass es eine schnelle Zeit in die Tabelle bringt,
die in Wirklichkeit besagt,dass das Objekt, das es umschließt, eine gültige Objektreferenz oder eine gemeinschaftliche sein kann
. Wie wir in der letzten Einheit sagten, besteht
die Idee hinter einer optionalen in Java Acht darin, dass es eine schnelle Zeit in die Tabelle bringt,
die in Wirklichkeit besagt, dass das Objekt, das es umschließt, eine gültige Objektreferenz oder eine gemeinschaftliche sein kann Dies geschieht mit dem optionalen Typ im Java Util-Paket, und hier ist ein Beispiel dafür, dass Mitarbeiter möglicherweise nicht oder es sich um ein tatsächliches
Mitarbeiterobjekt handeln . Jetzt, da optional ein tatsächlicher Typ selbst ist, ist
es ein Objekt. In der Tat kommt
es mit einem eigenen Satz von Methoden, die es uns ermöglichen, mit Optionalen zu arbeiten. Dies wird als optional erscheinen auf bezeichnet. Damit können
wir folgendes tun. Wir können Optionals erstellen, wenn wir sie verwenden wollen. Schließlich müssen
wir eine Möglichkeit haben, sie selbst zu erschaffen. Wenn wir in der Lage sein werden, sie für meine Methoden an andere Anrufer zurückzugeben, können
wir ihre Werte in die Wörter einsehen. Sehen Sie, ob sie eine gültige Objektreferenz oder Zustimmung enthalten. Nein, wir können auch, wenn sie sich nicht auf Null-Objekt beziehen, ihre Werte aufheben. Da es jetzt eine Ebene der Indirection gibt, wo wir den Rap-Wert von der optionalen erhalten, erlauben
sie uns auch, Standardwerte in dem Fall anzugeben. Der Rap-Wert ist „no“. Dies ist ein weiterer netter Vorteil, der in der Lage ist, Standardwerte Aspekt bereitzustellen. Und schließlich
gibt es einige fortgeschrittene Anwendungen, die Zeit oder in die funktionale Programmierseite, wo wir sie bedingt zurückgeben können. Kartieren Sie sie etwas später mehr dazu. Aber für jetzt, nur das, dass diese Funktion ermöglicht, Optionale gut mit den neuen Pipelines und Streams zu spielen. Konzepte von Java hilft sowieso, genug, intra, lassen Sie uns sie in Aktion sehen. In diesem Video werden
wir uns die ersten 4 zuerst anschauen Optionale
erstellen. Wenn das Optionale einen Wert hat, vergessen Sie
nicht, dass der Punkt einer optionalen ist, dass er Wert antreten könnte oder nicht. Dann können Sie sie mit der statischen Faktor-Methode erstellen, die optional aus ist. Nehmen wir das zum Beispiel. Hier haben wir eine Zeichenfolge, die in eine optionale eingewickelt ist, weiß ich, dass als Benutzer der
Faktormethode erwartet
wird, dass der Wert U Pass nicht nein ist Wenn dies der Fall ist, löst
diese Methode eine Nullzeigerausnahme aus. Sie verbringen sein eigenes, um ein Optionales zu erstellen, das keinen Wert hat, ein sogenanntes NT optional. Nun, es gibt eine andere statische Factory-Methode für sie, die optional das leere ist. Da wir eine Entität erstellen, die sich nicht auf einen Wert bezieht, müssen
wir keinen Wert an diese Methode übergeben. nun Wenn Sienuneine optionale aus einer Referenz erstellen möchten, die nein sein kann oder nicht, können
Sie dies mit der off leichtgläubigen Methode tun. Im Gegensatz zu optionalem doff wird dieser geworfen oder Punkte oder Ausnahme, wenn der Wert hinter no ist. An dieser Stelle wissen
wir nun, wie wir Optionale schaffen können, die es gibt. Definitiv halten des Wertes auf jeden Fall keinen Wert auf meinen erzählten den Wert. Dies bringt uns auf, wie man innerhalb von Optionalen schauen kann, um zu sehen, welche Werte sie auf haben. Wir haben zwei Methoden, um dies entsprechend den beiden Zuständen zu tun, und optional kann in sein. Sind Sie der Zustand, in dem Sie eine gültige Referenz auf die Zustände haben, die überhaupt keine Referenz haben? Diese Methoden sind vorhanden ist, ist leer ist eine ziemlich selbsterklärende. Wenn der optionale Wraps ein gültiger Verweis ist, gibt
Präsenz true zurück. Und umgekehrt, wenn das Optionale nicht referenziert, ist
ein Wertobjekt leer zurück. True, wenn Sie herausgefunden haben, dass das optionale, mit dem Sie arbeiten, tatsächlich vermeidbare Objekt enthält, können
Sie alle denken, die die Methode erhalten, die den tatsächlichen umschlossenen Wert zurückgibt. Ich weiß, dass, wenn Sie get on ein optionales aufrufen, das sich nicht auf ein bewertetes Objekt bezieht, Sie einen No Point oder eine Ausnahme vom FBI erhalten. Bewachen Sie
also immer den Anruf, um sicherzustellen, dass es tatsächlich einen Wert gibt. Die optionale by testing ist zuerst vorhanden, wie in diesem Beispiel können
Sie auch bedingt Code ausführen, basierend auf dem Vorhandensein eines Wertes in der optionalen. Durch die Verwendung der if present Methode. in diesem Beispiel an, Nehmen
wirin diesem Beispiel an,wir suchen nach einem Stern. Mitarbeiter in der aktuellen gesehen durch den Aufruf von Samir
P. I. Auf es gibt eine optionale, um anzuzeigen, dass sie auf kann nicht ein Stern sein. Mitarbeiter gefunden, in dem Fall, dass es eine gefunden. Die Nachricht wird gedruckt. Niemand zu dem Bit über die Möglichkeit, Standardwerte, die ich zuvor erwähnt habe, setzen zu können. So Standardwerte air, die mit zwei Methoden unterstützt werden, diese sind oder sonst erhalten oder liefert einen Standardwert, wie in diesem Beispiel, hat
er. Angenommen, wir haben einen EPI-Aufruf, der den Benutzernamen gibt
, der mit einem Beitrag auf einem Nachrichtenboard oder Social-Media-Feed oder
Stream verbunden ist. Wenn kein Name vorhanden ist, verwendet standardmäßig einen Namen für den String Anonymous. Wir haben es oder sonst Methode verwendet, um einen tatsächlichen Standardwert in diesem Beispiel zu liefern, wo die Verwendung oder sonst erhalten, anstatt den Standardwert
zu liefern, wie es ist oder sonst bekommen uns erlaubt , die Methode oder Funktion anzugeben, anstatt dass es aufgerufen, um den Standardwert zu erhalten, wenn er benötigt wird. Nehmen wir an, dass der Benutzer, wenn er ein Konto erstellt hat, ein Passwort definieren
könnte, für das er verwenden möchte. Wenn es nicht angegeben hat, wann wird eine für sie generiert. In diesem Fall würden
wir das Passwort nicht fest codieren wollen und so würden wir einen
Passwortgenerierungsdienst aufrufen . Der Schlüsselteil hier ist, dass wir verwenden oder sonst bekommen, was uns ermöglicht, wie wir gesagt haben, nicht den Standardwert selbst, sondern die Methode, um den Standardwert zu erhalten. Das ist aus einer Performance-Perspektive gut. In einigen Fällen, zum Beispiel, kann
es nützlich sein, wenn Sie einen Dienst andere Farben teuer in irgendeiner Weise aufrufen müssen. Der Aufruf soll nur ausgewertet werden, wenn der optionale Wert zur Laufzeit nicht vorhanden ist. Nicht in allen Fällen, wie es der Fall sein wird. Wenn Sie eine Methode aufrufen, können
Sie auch wählen, eine Ausnahme zu werfen, wenn kein Wert für die optionale angegeben ist. Und so schließlich haben
wir ein letztes Beispiel, wenn wir eine Ausnahme auslösen wollen, anstatt einen Wert zurückzugeben. Manchmal gibt es nichts anderes, als eine Ausnahme zu werfen, wenn wir wirklich
nicht ohne den wirklichen Wert auskommen können . In diesem Code haben wir also ein alternatives Design für den Benutzer. Wenn der Benutzer kein Kennwort angegeben hat, erlaubte es nicht, ein neues zu generieren, sondern führe stattdessen einfach eine Ausnahme zurück zum Front-End. Um dies zu tun, verwenden
wir die oder sonst Wurfmethode, wie es hier gezeigt wird, so dass Sie wahrscheinlich beginnen können, ein Gefühl für das optional erscheinen jetzt zu bekommen, wie es
uns den Weg führt ,
schöner, lesbarer Code zu produzieren . Wir sind noch nicht fertig, obwohl wir immer noch die bedingten Karten aufgrund auf schwächen. Wir werden in den nächsten Videos darauf eingehen, also bleib dran.
13. 13 Mapping und Filterung mit Optionalen: Also in der letzten Einheit hatten wir eine gute Einführung in die Verwendung von Optionals enthüllt ein ziemlich wenig Boden in dieser Einheit. Wir werden die Dinge auf ein Niveau steigen und sehen eine etwas fortgeschrittenere Nutzung. Diese Luft, die Mapping-und bedingten Funktionen, die sie so bieten, verwandeln sich in einige andere nützliche Funktionen, die in dieser Zeile sind. Wir werden uns jetzt die Karten-Methode ansehen. Diese Methode ermöglicht es uns, den Rattenwert eines optionalen auf einen Teil des Wertes abzubilden. Zum Beispiel könnten
wir in der Eingabezeichenfolge zuordnen, um es in Großbuchstaben wie folgt zu konvertieren. Beachten Sie, dass die Ausgabe der Kartenfunktion nicht der Kartenwert selbst ist. Diese Map-Methode erlaubt es uns nicht, die Optionals-Funktion zu umgehen, so erhalten wir immer noch eine optionale. Es ist gerade jetzt ist es eine optionale von ihnen bis Sie haben. Dies ist wichtig und sehr elegant, da es bedeutet, dass wir optionalen FBI-Kurs zusammen ändern können, um einige weitere Verarbeitung in einer
schönen,
funktionalen Art und Weise zu tun schönen, , jetzt, dass wir alles auf dem Objekt gedrückt ihn zuordnen können, zum Beispiel , Angenommen, wir haben eine Klasse wie diese, um eine Person mit einem Namen und Alter darzustellen, die wir kartieren könnten, um nur das Alter der Person so zu bekommen. Dies mag einige nicht so interessant erscheinen, aber wieder, wegen der Tatsache, dass eine optionale zurückgegeben wird, können
wir weitermachen. Führen Sie weitere Verarbeitungsschritte durch, um zu sehen, wo dies nützlich sein könnte. In diesem Beispiel wird dieser Frühling auf Filter gesetzt, so dass die Map-Methode eine optionale Person einem optionalen Integer-Wert zugeordnet hat. Da erhalten Ege zurück, ein Ende auf diesem ist in einem Interview schnelle Art boxed, so dass wir diesen Kartenwert haben. Wenn es ein Ende ist, bestreiten
wir das Alter und sehen, ob es in einen bestimmten Bereich wie diesen fällt, weil wir
es zu einem Ende gemappt haben, um das Alter zu erhalten, können
wir es jetzt in Weltraumoperationen darauf tun. Also hier filtern wir, um nur die Werte zu sehen, die innerhalb eines bestimmten Bereichs liegen. In diesem Fall könnten wir
zwischen 13 und 19 eine Logik haben, die wissen muss, ob John, der 21 war, ein Teenager ist. Wir können dies jetzt tun, dank der Tatsache, dass die optionale erlaubt uns, die Person Objekt zu kartieren, um das Alter
aus ihm heraus zu bekommen , und dann das optionale FBI erlaubt uns, dieses Alter durch die Anwendung eines Filters zu überprüfen. Es gibt andere Möglichkeiten der Filterung, aber wir werden diese für die Pipelines und Stream-Abschnitt belassen. Aber im Moment können
Sie sehen, dass eine Menge an Energie in so einer kleinen Luft gepackt ist. P i auf viel mehr, als Optionale zuerst zu sein scheinen. Es zeigt Ihnen wirklich die Macht des optionalen FBI, wie Sie seine Methoden zusammen verwenden können, was sehr sauberer Code ist. Wir sind jetzt fast fertig, aber wir müssen uns nur eine letzte Methode ansehen, und das ist eine flache Karte. Also, worum geht es hier? Sie? Nun, wir haben gesehen, dass, wenn wir die Karte oder den Filter verwenden,
Methoden, die optional sind, immer auf zurückgegeben werden. Dies wird durch diese Karten- und Filtermethoden erreicht. Dies ist das Schlüsselbit, das den Rückgabewert zurück in eine optionale umhüllt oder optional das
leere zurückgibt , wenn der Wert nein war. Der Grund, warum wir gesehen haben, ist, dass dies uns ermöglicht, weitere Operationen auf den zurückgegebenen
Wert anzuwenden . Solange wir also immer ein optionales erhalten, können
wir immer Methoden auf dem optionalen aufrufen, und das ermöglicht es uns, diese Funktionsaufrufe gemeinsam zu ändern. Diese Idee funktioniert also gut, solange wir den Wert selbst von der Methode zurückgeben, die
Coles abbildet, jedoch dieses Channing durch immer zurück und optionale Unterbrechungen, wenn die Methode zurückkehrt und optional selbst die nächste Jane Cole würde brechen. Hier kommt also eine flache Karte ins Spiel. Flat Map umschließt den Rückgabewert nicht und ein optionales, während map dies tut. Dies führt zu den folgenden Regeln. Verwenden Sie map, wo die übergebene Zuordnungsmethode den tatsächlichen Wert selbst zurückgibt und Flat Map verwendet wobei die übergebene Zuordnungsmethode eine optionale vom tatsächlichen Wert zurückgibt. Auf diese Weise werden
Sie nie die doppelte Verpackung Problem auf nie optionalen Ofen optional. Also, einige von ihnen, wie Sie jetzt gesehen haben, geben
Optionale uns eine leistungsfähige Möglichkeit, einen Großteil des Standardcodes auszuschneiden, der mit
keiner spitzen Überprüfung auf Make NorthPoints oder Ausnahmen weniger wahrscheinlich verbunden ist, indem Sie uns dazu zwingen befassen sich mit, ob ein Objekt nicht sein kann oder nicht. Die Typ-Level-Optionals bringen auch einen nützlichen Auftritt für den Umgang mit Bedingung , ALS-Standardwerten, Ausnahmefällen, Mapping und Filterung in einer ordentlichen, ordentlichen und funktionalen Weise mit sich. Bereitstellung sauberer aufgetreten auf dem Weg
14. 14 Standardmethoden: Lassen Sie uns jetzt eingraben und einen Blick auf einen anderen Funktionsumfang von Job rechts werfen, der es uns ermöglicht, die Implementierung in Schnittstellen zu setzen, nämlich Standard- und statische Methoden. Jetzt müssen Sie diese vernünftig verwenden, und Sie werden sie sicherlich nicht jeden Tag verwenden. Aber sie sind nützlich, um Ihren Job zu haben. Acht. Entwickler-Toolkit Sie war sie, wenn nötig, also lassen Sie uns erkunden, was sie zusammen sind. Bis zu Java acht bestand
eine Schnittstelle aus nur öffentlichen abstrakten Methoden, die darauf hinwies, dass jeder, der eine konkrete Implementierung einer Schnittstelle mit anderen Worten
bereitstellen möchte , eine Implementierung, die mit einem neuen Schlüssel unempfindlich sein könnte Wort wie dieses war verpflichtet, diese Methoden zu
implementieren. Es war für jede Form der Durchführung nicht möglich. Um in der Schnittstelle auf konkreten Implementierungen zu erscheinen, musste alle Details zur Verfügung gestellt werden. Da Java acht Schnittstellen jetzt erlaubt sind, die Implementierung auf eine von zwei Arten
durch eingekreiste Standardmethoden auf durch statische Methoden bereitzustellen , werden
wir Standardmethoden in einem Moment sehen. Diese in der interessantesten. Aber für jetzt, werfen
wir einen Blick auf die einfachsten Fall statische Methoden. Betrachten wir eine Schnittstelle Person wie diese. Dies hat zwei Methoden. Wieder einmal, der vollständige Name
einer Person auf der anderen, um das Alter einer Person zu bekommen. Jetzt wissen wir von der Schnittstelle, dass die get full name Methode einen Stream zurückgibt Möglicherweise müssen
wir eine Dienstprogrammmethode bereitstellen, die einen abgekürzten Namen zurückgibt. Aus welchem Grund auch immer. Um dies zu tun, könnten
wir eine Implementierung bereitstellen. In der Schnittstelle wie folgt. Dies ist eine statische Methode in Aktion. Es ist im Grunde eine reguläre Methode, die hier das Wort statisch vorangestellt ist, die Dienstprogrammmethode bereitstellt, die einen Namen annehmen kann, ist eine Zeichenfolge bei der Rückkehr, die abgekürzte Version. Also nicht, dass wir uns nicht auf eine Instanz beziehen, die es gibt, um zu hören. Das ist, wie es sein sollte. Wir haben keine Instanzdaten, da es sich um eine Schnittstelle handelt. Und so ist diese Methode nur ein Stück Code,
der unabhängig von der Zeichenfolge arbeitet, die sie übergeben wird. Sein Input. Beachten Sie ein paar Dinge von hier. Zunächst signalisieren
wir, dass wir eine statische Methode durch Präfix in der Methodenimplementierung mit
dem statischen Schlüsselwort definieren . Dies ist wahrscheinlich offensichtlich, aber es lohnt sich, darauf hinzuweisen, auch weil diese Methodist statisch an diesen
Typ gebunden ist , also ist es nicht geerbt. Alle Implementierungen sind Erweiterungen der Schnittstelle. Wir können nur Person anrufen, sie
nicht abkürzen, und das ist das. Und schließlich ist es
uns nicht erlaubt, Methoden in der Schnittstelle selbst aufzurufen, die beispielsweise auf
Instanzdatenzugreifen würden Instanzdaten . Wir konnten den vollständigen Namen nicht aufrufen, da dies sich auf den Zustand des Objekts beziehen würde. Wir können nur andere statische Methoden aufrufen, entweder Auf dieser Schnittstelle auf anderen Typen führt
dies natürlich zu der Frage. Wo sollte ich Startmethoden und -schnittstellen für die Antwort verwenden? Sie ahnen wahrscheinlich, dass sie jetzt gut sind, um Dienstprogrammmethoden zu definieren, insbesondere Dienstprogrammmethoden, die seit ekstatischen Methoden nicht vom Zustand abhängen, so dass statische Methoden und Schnittstellen sie ziemlich selbsterklärend sind und sich ganz natürlich anfühlen sollten ? Werfen wir einen Blick auf Standardmethoden als nächstes. Dies ist, wo es mit Standardmethoden ein bisschen interessanter wird. Es ist das gleiche Konzept, wirklich. Wir erlauben Implementierung und Schnittstelle, aber dieses Mal ist es auf Instanzebene. Wenn wir von einem Personenbeispiel wieder betrachten, das die statische Methode hatte, war
es ein wenig ungeschickt, dass wir den Namen in die get Abkürzung in ihrer Methode übergeben mussten . Der Grund dafür war, dass wir eine statische Schnittstellenmethode definiert haben und daher
auf alle Instanzzustände zugreifen erlaubte . jedoch Wenn wirjedochdie Instanzschnittstellenmethode eine sogenannte Standardmethode definieren, dann können wir instanzweise Methoden zugreifen und so die Implementierung ändern, um eine
Instanzmethode auf der Schnittstelle selbst wie folgt aufzurufen . Es ist eine kleine Wieder Factoring, aber macht den Unterschied. Jetzt ist es sehr klar, dass die Methode so konzipiert ist, dass sie auf dem Feld „get full name“ arbeitet, da wir diese Methode tatsächlich in der Standardmethode selbst verwenden. Es ist ziemlich schön, dass wir dies tun können, da es unsere intensive,
viel klarer macht Lassen Sie uns eine Minute dauern, um die Unterschiede zu der statischen Inter
First-Methode Implementierung zwei erstellt böse Methode zu bemerken . Wir setzen der Methodendefinition den Standardschlüssel voran. Und, wie gesagt, können
wir jetzt den vollständigen Namen mit Atsu I aufrufen. Wir können Instanzmethoden innerhalb der Methodendefinition aufrufen. Auch
nicht, dass Standardmethoden nicht nur auf dem Interface-Typ selbst verfügbar sind, sondern auch in allen Erweiterungen dieser Schnittstelle verfügbar sind. Sind Sie Klassen, die diese Schnittstelle erweitern oder implementieren? Die wichtigsten Vorteile über statischen Inter First-Methoden auf D vier Methoden ist, dass sie Ihnen
erlauben Verhalten zu Schnittstellen hinzuzufügen, die bereits da draußen in der Wildnis sind, von einem Ihrer FBI-Clients verwendet werden, ohne sie zu brechen. Ohne dieswäre
die Zugabe eines der größten Vorteile von Java unmöglich gewesen. Ohne dies Das sind die Fähigkeiten von Stream-Sammlungen, damit sie auf funktionale
Weise durch Pipelines oder Sammlung verarbeitet werden können. Klassen haben jetzt eine Stream-Methode hinzugefügt, um sie in Job acht, die fast von Magie auf dieser Magie erscheint, wird durch Standardmethoden erreicht. Es gab eine Möglichkeit, alle Sammlungstypen zu verbessern, ohne vorhandene Clients ein
paar andere Punkte um Standardmethoden zu unterbrechen , bevor wir einschließen. Erstens, weil Steve, welche Methoden bieten Implementierung? Wir müssen sie nicht wie bei normalen Schnittstellenmethoden implementieren. Das ist irgendwie intuitiv, da sie bereits implementiert sind. jedoch Da ihre Implementierungjedochdie Möglichkeit haben, sie zu überschreiben, wenn wir Subtypes auf einem subtileren Punkt wählen, da wir mehrere Schnittstellen erweitern oder implementieren könnten, ist
es technisch möglich , die wir in Inter Verse implementieren konnten, die zufällig die gleiche Standardmethode haben. Ich verwende einen Methodennamen gibt beide Methodenargumente zurück. Wenn dies geschieht, weiß
der Compiler nicht, was zu tun ist und verlangt von uns, unsere eigene Implementierung bereitzustellen um Mehrdeutigkeit zu vermeiden und die Situation zu lösen. Dies ist höchst unwahrscheinlich, aber es lohnt sich, darauf hinzuweisen, , nur für den Fall. , Wie wir gesehen haben bietet das
Zulassen von Implementierungsschnittstellen eine schöne Möglichkeit, generisches Verhalten in
sie zu schieben , ohne vorhandene Implementierungen zu unterbrechen. Wer könnte nur profitieren, oder sogar klingen auf, die ignorieren das neue Verhalten,
das zu ihnen in seinem Kauf re kompatible Weise geschoben wird. Dies ist auch die Magie, die Java-Sammlungen mit den besten
Stream-Programmierfunktionen unter der Haube erweitert werden können . Was ist die Aufrechterhaltung der Abwärtskompatibilität mit vorhandenen Code-Kosten von tatsächlich, aber wahrscheinlich mehr für die Entwicklung öffentlicher Opioide und Tag zu Tag Carding, aber ein nützliches Werkzeug in Ihrem Conan hat es dennoch genommen.
15. 15 Verweisen auf die Methode und ihre verschiedenen Typen: mit Job AIDS, die die Tür zur funktionalen Programmierwelt öffnet, können
Sie sich vorstellen, dass es bereits Tonnen von Methoden sind, die Sie in einem funktionalen Kontext verwenden könnten. Natürlich ist
die Frage, wie machst du das? Nun, die Sprachdesigner haben
auch daran gedacht . Wie es auf DSO in Java passiert, wurden
acht Methodenreferenzen eingeführt, die uns genau diese Methodenreferenzen oder einen neuen Feature-Job machen können. Acht auf. Sie ermöglichen es uns, auf eine bestehende Methode in einem Lander-Expression-Kontext zu verweisen. Lassen Sie uns eine kurze Zusammenfassung von Landers und Funktionsschnittstellen in Java acht haben, damit wir meine
anderen Referenzen in Kontext stellen können . Zuerst, hier ist ein Darlehensausdruck. Dies dauert eine Zeichenfolge und wird an den Konsul gedruckt, wenn es aufgerufen wird. Nichts Schickes. Es ist nur ein System aus Drucklinie, das die Nachricht an Prince bringt. Alles braucht einen Typ in Java, und so haben wir gesehen, dass wir diesen Holzausdruck einer Funktionsschnittstelle wie
dieser zuweisen können . Also, was wir hier tatsächlich tun, seine Verpackung einige Implementierung in diesem Fall, eine System out print line Anweisung, die eine Nachricht auf die Zuweisung zu einer
funktionalen Schnittstelle drucken wird . Wir könnten es jeder funktionalen Schnittstelle zuweisen, die mit der verwendeten Methodensignatur
des Landers übereinstimmte , die hier eine der Standard-Funktionsschnittstellen verwenden würde,
was bedeutet, dass eine Funktion, die den Wert nimmt, eingegeben wird, aber sie Ausgabe zurückgibt. Das ist ein Verbraucher. Es verbraucht den Eingabeparameter. Dadurch haben
wir die Funktion erfasst, aber noch nicht aufgerufen. So können wir das dann ganz einfach machen. Wir wenden jetzt die Funktion an, der Verbraucher umgeht sie. Was es benötigt, seinen einfachen Parameter wird von der Consumer-Funktionsoberfläche benötigt, wenn dies
ausgeführt wird, wird
die Nachricht gedruckt. nun Wenn Sienuneinen Lunder-Ausdruck haben, der nur eine vorhandene Methode verursacht, können
Sie stattdessen eine Methodenreferenz verwenden. Um also die beiden Codezeilen zu nehmen, die wir gerade zusammen geschrieben haben, was so aussieht, wenn wir ihn nebeneinander sehen, könnten
diese dadurch ersetzt werden. Also, wie Sie sehen können, haben
wir diesen Lunder Ausdruck durch diese Methodenreferenz ersetzt. Dies ist ein Verweis auf die statische Methode Drucklinie, die im System auf unser Objekt definiert ist. Nun, das sollte sich ziemlich intuitiv anfühlen, wenn Sie sich um Lander-Ausdrücke und funktionale Schnittstellen kümmern. Alles, was wir getan haben, ist das Lambda gegen einen Verweis auf den einen und einzigen Methodenaufruf ausgetauscht,
den es in diesem Stadium macht. Nein, du hast gesehen, wie einfach es ist. Lassen Sie uns ein wenig tiefer auf Schauen Sie sich die verschiedenen Arten von Methodenreferenzen, die wir
zur Verfügung haben , um uns die schreckliche des gleichen allgemeinen seit Sex mit dem Doppelpunkt,
der den Typ oder Objekte in der Methode trennt . Aber es lohnt sich, über die vier Mal von Methodenreferenzen zu gehen, die wir jetzt ein schnelles Wort der
Warnung haben . Wenn Sie eine Dokumentation lesen, die Oracle-Website über Methodenreferenzen enthält, werden
Sie sehen,
dass sie werden
Sie sehen,
dass sie
ziemlich verwirrende und formulierte Definitionen verwenden. Also werde ich diese Definitionen hier geben, jetzt in den Aufzählungspunkten durchgehen. Aber wie wir jeden erklären, werde
ich eine klare und M für jeden geben, so dass Sie es leichter in Ihrem Gedächtnis halten können, um zu verstehen, was es ist. Also keine Panik. Diese werden abscheulich kompliziert klingen, aber es ist nicht so schlimm, wenn wir sehen, was jeder ist. Wenn wir uns die Beispiele ansehen, sollte
es ziemlich klar werden, dass diese Arten von Methodenreferenzen die offensichtlichen sind, die wir sowieso haben
sollten. So tief atmet jetzt dort. Die Zeiten von Methodenreferenzen sind wie folgt ein Verweis auf eine statische Methode, ein Verweis auf eine Instanzmethode für ein bestimmtes Objekt, ein Verweis auf eine Instanzmethode für ein beliebiges Objekt in der Referenz auf einen Konstruktor. Es gibt eine Menge hier, also lassen Sie uns Beispiele nacheinander sehen. zunächst Lassen Sie unszunächststatische Methodenreferenzen dafür betrachten. Betrachten wir die statische Methode Parsons im Klasseninterview. Dieses Spiel wird als Methodenreferenz wie folgt dargestellt. Nein, da die parson-Methode eine Zeichenfolge bei Rückgaben und Enden annimmt, können
wir die Funktion von string und interject type verwenden, um sie zu referenzieren, so dass sie wie folgt
zugewiesen und gespeichert werden könnte . auch, Beachten Sie
auch,dass die parson-Methode tatsächlich einen Grundkörper im Typ zurückgibt. Aber wir dürfen die Funktion verwenden, die referenziert, die Ihren schnellen Typ eingegeben hat. Da das Ergebnis eine Änderungsbox für uns vom Primitiv in die in Ihre
Appetitreferenz sein wird , ist
es gut zu wissen, dass die Auto-Box und das Feature immer noch gut mit all diesem funktionalen
Zeug spielt , das dem Plattform sowieso. Sobald wir die Methodenreferenz
haben, können wir sie so aufrufen. Hier übergeben wir die Zeichenfolge,
wörtlich 35, um den tatsächlichen Wert zurück zu bekommen, wie wir es erwarten würden. Es gibt also eine statische Methodenreferenz, die wir verwenden, wenn wir auf eine statische Methode in der Klasse verweisen, wenn wir sie in einem funktionalen
Kontext wiederverwenden . Als nächstes haben
wir Instanz, Methodenreferenzen, und es gibt zwei Male dieser gebunden und ungebunden, wie wir jetzt sehen werden. Während sich ein statischer Meta-Verweis auf eine statische Methode für eine Klasse bezieht, diese Methodenarten auf diese so genannte Instanz, die die Verweise auf eine
Instanzmethode in der Klasse verweisen . Da wir einen Verweis auf eine Instanzmethode haben, muss
sie letztlich gegen eine tatsächliche Instanz aufgerufen werden. Jetzt können wir wählen, ob wir die Methodenreferenz erstellen, um auf eine tatsächliche Instanz zu verweisen, wenn die Methode definiert referenziert. Dies ist der beschränkte Typ, oder wir können wählen, ob diese Bindung Zehenbuchstaben verschieben und nicht die Instanz angeben. Dies ist wieder der nicht gerundete Typ. Einige Beispiele sollten dies deutlich machen. Nehmen Sie die String-Quest. Dies definiert eine Methode für Großbuchstaben, die auf einem String arbeitet. Instanz, Es ist eine Instanzmethode. Wenn wir ein vorhandenes String-Objekt haben, würde die Methodenreferenz gegen Wir könnte es wie folgt liefern aufzurufen. Nicht ist, dass wir den String-Klassennamen nicht verwenden, wenn wir die Methodenreferenz deklarieren, sondern auf eine tatsächliche Variable verwiesen, die eine String-Instanz enthält. diesem Grund ist es jetzt Kleinbuchstaben s Doppelpunkt in Großbuchstaben, da wir eine Methodenreferenz für eine bestimmte Instanz aufrufen, Diese Methode verweist auf einen Lieferanten, der eine Zeichenfolge zurückgibt, so dass sie
wie folgt zugewiesen und gespeichert werden könnte , dass es irgendwann tatsächlich aufgerufen werden kann, um das Ergebnis wie folgt zu erhalten das die kapitalistische Version der Zeichenfolge
zurückgibt. An diesem Punkt denkst du vielleicht, ich verstehe es nicht. Warum ist die Großschreibung ein Lieferant? Es ist eklatant eine Funktion, die bei Rückgaben eine Zeichenfolge annimmt. Die Großbuchstaben Version, die auch eine Zeichenfolge ist, so sicher sollte es Funktion von String-String sein. Also, ja, Sie wären der richtige für eine Instanzmethodenreferenz vom ungebundenen Typ, bei der wir die Instanz beim Deklarieren der Methodenreferenz nicht bereitstellen. In diesem Fall, ja, es nimmt eine Zeichenfolge und gibt eine Zeichenfolge auf DSO ist eine Funktion von String-String, aber nicht, zum Beispiel, Methodenreferenz des gebundenen Typs, da In diesem Fall, wo die tatsächliche Instanz bindet, wird
die Methodenreferenz aufgerufen, wenn wir die Methodenreferenz selbst deklarieren und
daher keine Eingabe annimmt,gibt daher keine Eingabe annimmt, es nur die Ausgabe für alles zurück, was nur gibt zurück. Ausgabe ist ein Lieferant, also in diesem Fall ist es ein Lieferant von String. Nur um das zu wiederholen, ist es mit der ungebundenen Instanz ziemlich wichtig. Methodenreferenz. Der Methodenreferenz ist kein Kontext zugeordnet. Kein Objekt. Sieh es dir einfach an. Es ist eine Zeichenfolge mit einem großen Doppelpunkt in Großbuchstaben. Es gibt nichts über eine tatsächliche Instanz in dieser Definition, und wenn Sie sie aufrufen, benötigen
Sie die Zeichenfolge, um sie gegen aufzurufen, und dann gibt sie die Version in Großbuchstaben zurück. Also String rein, String aus. Das ist dann eine Funktion, also Funktion der String-Zeichenfolge, aber mit der gebundenen Instanzmethodenreferenz. Wir verhandeln. Kontakt dagegen beginnen lassen. Dies wird von der Instanz bereitgestellt, gegen die sie am aufgerufen wurde. Das ist also, als hätte man eine Funktion, die bereits mit ihrer Eingabe ausgefüllt wurde. Aus diesem Grund ist
die auf Großbuchstaben Methodenreferenz jetzt keine Funktion mehr. Es hat bereits seinen Eingangssatz. Als wir die Methodenreferenz erstellt haben. Wie Sie sehen können, erstellen
wir die Methodenreferenz, indem wir die Instanz angeben, gegen die sie aufgerufen werden soll, und so gibt es nur den Wert auf. Aus diesem Grund ist
es ein Lieferant, der
die Funktionsschnittstelle mit nur Returns ist. Der Wert auf nimmt keine Eingabe an. Übrigens, wenn Sie die Argumente für eine Funktion teilweise füllen, erstellen Sie
technisch eine andere Funktion, indem Sie einen oder mehrere seiner Eingabeparameter binden, wie wir hier waren. sieben dafür ist die Funktion. Es ist ziemlich fortgeschritten sind und wir wollen keine Nebenrechte bekommen. Aber ich dachte erwähnt, falls Sie diesen Begriff in Zukunft hören. Jetzt weißt du, was es bedeutet. Jedenfalls. Lassen Sie uns aufknacken und haben ein bisschen eine Verschnaufpause jetzt mit etwas, das endlich leicht zu
verstehen ist konstruierte Methodenreferenzen. Also Leslie dann haben wir mit Referenzen konstruiert, die, wie ich sagte, Kim war ein Pleasants Preis. Da sie die Nachrichten leicht zu verstehen sind, ist
dies nur eine Methodenreferenz, die eine Kohle zu einem Konstruktor ausdrückt, wie wenn Sie den neuen Operator
aufrufen, um ein neues Objekt eines bestimmten Klassentyps zu erstellen. zum Beispiel das konstruierte betrachten, Wenn Siezum Beispiel das konstruierte betrachten,um eine verknüpfte Liste von Strings zu erstellen, ist die
entsprechende Methodenreferenz dieser. Wir können es so zuordnen und speichern. Es ist ein Konstruktor, also wird es als Wert zurückgegeben, nämlich die Instanz der Liste, die erstellt wird, damit wir sie an einen Lieferanten der Liste eingeben können. Auf dem spezifischen Zustand Rückgaben ist eine Liste von String. Schließlich können
wir es aufrufen, um die Liste wie folgt zu erhalten. Beachten Sie, dass der Pilz inter zuerst für konstruktive Methodenreferenzen ein Lieferant ist, der keine Argumente
nimmt und einfach etwas zurückgibt. Das bedeutet also, dass Sie nur keine Argumentkonstruktoren aufrufen können. Mit anderen Worten, die grundlegenden Defoe-Konstrukte, die Sie in Java erhalten, die beim Erstellen der Objekte keine Argumente annehmen. Es ist eine Einschränkung, ja, aber da ist es. Nun, das war ziemlich viel Boden, den wir in diesem Modul abgedeckt haben. Wie Sie sehen können, antworten
Methodenreferenzen schlecht. Sobald Sie den Dreh von ihnen bekommen, müssen
Sie nur überlegen, auf welche Ziele Hoffnung sein kann. Dies wird aus seinem Kontext abgeleitet. Sobald Sie sie haben, können
Sie sie überall dort verwenden, wo Lander-Ausdrücke verwendet werden können. Auf. Insbesondere werden
Sie sehen, dass sie viel in Pipelines verwendet werden, wo Stream beste Programmierung
mit den Optionalen ins Spiel kommt . FBI auch. Jetzt, da Sie sie erkennen können, sollten
sie einfach zu bearbeiten sein, wie Sie in Job acht auf eine elegante Weise gesehen haben bereits vorhandene Methoden in einem funktionalen Kontext zu
referenzieren.
16. 16 Einführung in den Demos Abschnitt: Jetzt, da wir die Muttern und Bolzen von Job acht über die Theorie hinter all den verschiedenen Konzepten in diesem Abschnitt durchlaufen
haben, werden
wir einen Drilldown auf, werfen einen Blick darauf, wie wir das tatsächlich in unserem I DS codieren. Jetzt werde ich eine intelligente Idee verwenden, um dies zu tun, aber die Beispiele funktionieren in Eclipse gleich gut oder jede andere Idee, die Sie haben, haben die Gedankenprozesse
durchsucht, die wir durchlaufen, wie wir können, wie wir die I
D-Funktionen verwenden können , um Dinge ein bisschen einfacher für uns, wenn wir mit Java-Schreibcode arbeiten. Vor allem werden
die Männer Features im Kontext zeigen, so dass wir ein besseres Verständnis bekommen können wie
genau sie funktionieren. Also lasst uns dran kommen.
17. 17 Ein Blick auf die Funktionelle Schnittstellen: in diesem Video werden
wir ein wenig tiefer gehen und einige andere funktionale Schnittstellen erforschen, die
stoßen werden . So gibt es viele verschiedene Arten von Funktionsschnittstelle im Java, das
funktionale Paket util . Aber von all diesen
gibt es einige Funktionsschnittstellen, die nur Kernschnittstellen sind, die man wegen der vielen verschiedenen Arten von
Finanzschnittstelle einfach kennen muss . Diese Luft so ziemlich Lieferanten, Verbraucher, Prädikate, Funktionen und Betreiber. Also lassen Sie uns mit riesigen erkunden ist jetzt. wiederum Werfen
wirwiederumeinen kurzen Blick auf die Java util dot Funktion Java Docks, um zu sehen, welche
Funktionsschnittstellen wir tatsächlich zur Verfügung haben. Das sind ziemlich viele. Dies ist also die Job-Doc-Seite für Java Util, die Funktion auf Sie können oben sehen. Es besagt, dass Funktionsschnittstellen Zieltypen für Lambda-Ausdrücke und
Methodenreferenzen bereitstellen, was wahr ist. Das ist, was wir in diesem Kurs jetzt gesehen haben. Das erste Mal, als ich das sah, fühle
ich mich etwas überschwemmt, um ehrlich zu sein, denn es gibt so viel Zeug. Es gibt so viele verschiedene Arten, und sie alle scheinen ziemlich verwirrende Namen so sehr zu haben. Amerikanische Dienste sind diejenigen, die auf Andi, wenn Sie zuerst, wie es schwierig sein kann, zu verstehen oder zu schätzen, wo Sie sogar beginnen können. Also schauen wir uns einfach an, was wir hier drin haben, denn es ist eigentlich nicht so schwierig, wenn man sich ansieht, was sie tatsächlich zur Verfügung gestellt haben. Zweitens haben
wir Dinge wie Verbraucher,
Funktionen, Operatoren, Operatoren, Prädikate, Lieferanten. Aber dann werden Sie nur eine Art von Wiederholungen Verbraucheroperator, Verbraucherfunktion, Prädikatversorgung, eine Funktionsfunktion, Bedienerfunktion und so weiter sehen. Sie haben also wirklich nur diese fünf grundlegenden funktionalen Schnittstellentypen, die ich bereits gesagt habe, auf
die ein Verbraucherlieferant Funktion und Operator in diesem Paket basiert? Nun, sie haben tatsächlich produziert, sind eine Reihe von Pilzschnittstellen, die sie innerhalb der Jedi K selbst verwendet werden. Dies waren also die häufigsten, auf denen der Jedi K-Code selbst tatsächlich verwendet. Als Teil davon. Sie haben entweder typspezifische Funktion Inter Verse zur Verfügung gestellt, zum Beispiel doppelter binärer Operator, doppelter Consumer inspirierender Operator Double Eun Rhee. Operator. Diese Art von Dingen. Diesen sind typischerweise entweder Double oder End diese primitiven Typen vorangestellt oder sie haben uns generische Schnittstellen auf
gegeben. Das ist, wo wir einen Typ bereitstellen müssen, wenn wir diese Pilzschnittstelle verwenden. Offensichtlich ist
es für sie nicht möglich, alle Arten von Funktionsschnittstellen vorherzusagen, die Sie benötigen. Die Bereitstellung der generischen ersten gibt uns einen Weg durch Generika oder gibt ihnen
drei Dynamiken weg , anstatt die Form von Funktionsschnittstellen bereitzustellen, wenn Sie möchten. Und dann könnten diese in anderen Drittanbieter-Projekten wie unseren Projekten wiederverwendet werden, zum Beispiel müssen wir nur die tatsächlichen Typen einbinden, die wir diesen Konflikt benutzerdefinierte
Klassen verwenden möchten , zum Beispiel wie Person Mitarbeiter Abteilung, diese Art von Sache. Oder es könnte andere Typen geben, die entweder im Jedi K oder in den Open-Source-Paketen verwendet werden. , Zum Beispiel, String finden Sie hier keine stringbasierten Funktionsschnittstellen. Also schauen wir uns jede Call-Funktionsschnittstelle der Reihe nach an und sprechen durch, wie jeder verwendet wird. Also zuerst, wir können Verbraucher hier sehen. Also Verbraucher, wenn ich klicke und Verbraucher und wenn Sie sich die eigentliche Methodensignatur hier ansehen, können
Sie seine Funktion sehen. Deskriptor ist so, dass es einen Eingabeparameter von irgendeinem Typ Dysfunktion Interfaces nimmt an dem es
beteiligt ist, gibt nichtig zurück und Sie können auch unten sehen, dass Sie sogar
Verbraucher miteinander verketten können . So wie wir gesehen haben, wann Sie optionale Aufrufe miteinander verketten können, denn in den Fällen, in denen eine optionale Rückgabe auf optional zurückgibt oder zum Beispiel eine Zwischenoperation in der Pipeline und Streams-Framework einen Stream zurückgibt und Sie können weitermachen, indem Sie diese Methode ändern, Coles In ähnlicher Weise können
Sie dasselbe auch mit Verbrauchern tun, obwohl das außerhalb des Geltungsbereichs dieses Kurses liegt. Aber es ist etwas zu sehen, wenn Sie die Dinge weiter machen wollen. Als nächstes haben wir eine Funktion, aber wir werden dazu eine zweite Ursache kommen. Es ist etwas komplizierter, und stattdessen werden wir uns an den Lieferanten wenden. Hier. Wir sagen, es ist ein Lieferant von Ergebnissen, und es ist wahr. Also, was Luftzufuhr es ist, es hat gerade etwas zurückgegeben. Es nimmt keine Eingabeparameter. Du hast gerade etwas zurückgegeben und du kannst hier sehen. Wenn wir auf diese get-Methode klicken, können
wir hier sehen, dass es nichts braucht. Diese leeren Klammern hier, aber gibt nur einen Wert aus dem Parametertyp zurück. Werfen wir nun einen Blick auf die Funktionsfunktion im Raum. Sie können dargestellte Funktion sehen, die mit Ausnahme eines Arguments auf ein Ergebnis erzeugt. Und wieder sehen wir, dass wir Funktionen komponieren können, wie wir zuvor mit der
benutzerfunktionalen Schnittstelle gesehen haben,
die Sie dort oben sehen werden , wir haben diese und dann Methode, aber wir können eine Funktion übergeben, so dass sie Funktionen zusammen. Wenn Sie Funktionen zusammen komponieren, wo Sie nacheinander aufrufen, denken
Sie, klingeln Sie so genannte Funktionen höherer Ordnung. Es ist nur eine Möglichkeit, Wiederverwendbarkeit zu haben, aber eine Funktionsebene, die ziemlich nett ist. Aber wieder außerhalb des Rahmens dieses Kurses, dieser Einführungskurs. Aber es ist etwas zu prüfen, wenn Sie es den nächsten Schritt weiter machen wollen. Okay, also ist die Männermethode Hey, an der wir interessiert sind, ein Trick, damit ich mich bewerben kann. Sie sehen, es wendet Dysfunktion auf das angegebene Argument an, was das bedeutet, ist, die Eingabe zu nehmen und einige Ausgabe
zurückzugeben, die weiter nach unten scrollen. Wir haben diese hier auf einem Prädikat begründet, im Grunde ist eine Funktionsschnittstelle, wo es ein Argument benötigt, um eine Eingabe zu übernehmen, wird eine boolesche true oder false
zurückgeben. Dies ist also die Testmethode hier. Prädikate haben viel in Stream beste Verarbeitung verwendet, wenn wir Elemente filtern möchten. Das gibt Ihnen also eine sehr schnelle Einführung in die Funktionsschnittstellen, die in dem Job verfügbar sind, den Sie diesem Funktionspaket gesagt haben, und gibt Ihnen eine Vorstellung davon wo Sie suchen, um zu verstehen, wie sie funktionieren, damit Sie sie in Ihre Arbeit von Projekten. Auf über die nächsten Videos werden sehen, wie diese zu verwenden, tatsächlich in der Praxis in der Karte.
18. 18 Codierung und Referenzierung einer einfachen a: In diesem Video werden
wir einige Grundlagen mit Lambda-Ausdrücken und funktionalen Schnittstellen durchlaufen. Nun haben wir in den vorherigen Teilen des Kurses unter Ausdrücken getrennt von
funktionalen Schnittstellen auf eingeführt . Der Grund dafür ist, dass sie irgendwie anders sind. Syntax ist, wenn Sie so wollen, Lambda-Ausdrücke sind grundsätzlich Methoden, die Sie anschließen können. Zwei Stellen, an denen funktionale Interpreter auf Trichterschnittstellen erwartet werden, stellen die Zieltypen für diesen Mechanismus bereit. Was wir also mit Target-Typen meinen, ist, dass Funktionsschnittstellen entweder die tatsächlichen Typen sein können . Weisen Sie einen Lambda-Ausdruck zu oder die Typen zu, die Sie unter Ausdrücken übergeben haben, sagt
Methode, dass dies die beiden Männer Anwendungsfälle für funktionale Schnittstellen sind, Also lassen Sie uns einen Blick auf beide werfen, die jetzt aktiviert sind. DWI kann sie sehen, wenn wir etwas programmieren, und wenn wir sie gleichzeitig demonstrieren, wird
es leicht sein zu sehen, wie sie zusammenpassen. Stellen Sie die Dinge also in einen viel konkreteren Kontext. OK, also zuerst, fangen
wir mit dem einfachsten grundlegenden Ausdruck an. Sie können den grundlegendsten Landerausdruck haben Wenn wir
also in die statische Methode gehen, vermeiden Sie die Methode ändern, könnten
wir dies vorerst verwenden, weil sie keinen Instanzstatus für diese
Demo-Klasse haben , in der sie sich befindet, Wir zeigen nur ein paar Dinge, mit denen wir unter Ausdrücken und Funktionsschnittstellen tun können, so dass wir es nicht brauchen, um wie eine richtige Klasse zu sein. Das ist also vollkommen in Ordnung. Aber in der Hauptmethode, so kann ich Lunder Ausdruck erstellen. Sehr einfach. Unter dem Ausdruck wie diesem. Beginnen Sie mit einigen Klammern, Pfeiloperator und dann einem Hallo World-Statement. Dies ist also der grundlegendste Lander-Ausdruck. Wir haben am Anfang leere Klammern, da es keine Parameter annimmt. Sie erinnern sich, was wir in den Klammern Abschnitt im Grunde die Eingabeparameter und optional Parametertypen für die Lambs oder Ausdruck auf haben, weil wir nichts in diesen Klammern haben. Das bedeutet, dass es nichts braucht. Dieser unter Ausdruck nimmt keine Parameter an. Dann haben wir den Pfeil dort, dann auf den tatsächlichen unter Ausdruck selbst verweist, was in diesem Fall nur eine Anweisung
ist, die die Drucklinienmethode auf Systemen aufruft, um hallo zu sagen. Und an dieser Stelle werden Sie sehen, dass wir nicht einfach einen Lander-Ausdruck allein haben können, also beschweren sich die Compiler bereits. Sie können diese schnell sehen, rote Linie darunter. Wenn wir also hier rüber fahren, heißt
es, dass der Lander-Ausdruck selbst also dieser vollständige Ausdruck keine Aussage über . Das liegt daran, dass es keinen Sinn macht, einen Lambda-Ausdruck zu haben
, der nur irgendwie da draußen ist. Frei stehend, nicht an etwas weitergegeben zu werden, das nichts zugewiesen wurde, macht einfach keinen Sinn. Also, um dies zu einer richtigen Aussage zu machen, müssen
wir es etwas zuweisen, also weisen wir es einer funktionalen Schnittstelle zu. Nun, wenn wir das unter Ausdruck betrachten, wie wir gesehen haben, braucht
es keine Eingabeparameter, aber es gibt nichts zurück. Das bedeutet, dass wir es einer Methode zuweisen können, die keine Eingabeparameter für Rückgaben
void hat . Wie wir bereits gesagt haben, wenn Sie auf die mobile Schnittstelle schauen, wenn Sie auf die mobile Schnittstelle schauen,können
wir einfach einen kurzen Blick Jetzt Dann können Sie hier sehen, dies entspricht der Rechnung. Das wird kompatibel sein. Es ist eine funktionale Schnittstelle. Es ist hier mit seiner funktionalen Interface-Annotation kommentiert, was bedeutet, dass es nur eine einzige abstrakte Methode haben wird, die es tut, was hier diese öffentliche abstrakte Leere wieder ausgeführt wird. Der Funktionsdeskriptor der falschen Methode stimmt überein. Die Funktion wird vom
Landerausdruck entfernt, den wir haben, da wir hier nichts an die Methode übergeben, sind Eingabeparameter genau wie hier. Wir übergeben nichts in Londoner Ausdrücke, Eingabeparameter und ähnlich, gibt
auch nichtig zurück. Wir geben hier auch nichts zurück, also bedeutet das, dass ich diesen Lauf Herbal nehmen kann, ihn in Service-Referenz
kopieren kann. Und ich sollte in der Lage sein, das zu tun, wenn ich kann. Also, dieser Punkt, wir haben eine vollständige Aussage, so dass Sie hier sehen können. Habe die Funktionsoberfläche auf der linken Seite als Zielzeit für Londoner Ausdruck. Wir haben den Darlehensausdruck selbst
, der hier ist, haben wir diese Zuweisung zu der Variablen, also f n so an diesem Punkt, sobald diese Zeilen ausgeführt werden, wird
diese FN-Variable einen Verweis auf das unter Ausdruck halten. Nun, da wir jetzt diesen Lunder Ausdruck in die mietbare funktionale Schnittstelle eingegeben haben, bedeutet
dies, dass wir dann die Methode so effin dot run aufrufen können. Und wenn wir dies tun, werden
wir sehen, dass das Verhalten, das in dieser Variablen eingekapselt wurde, die den
Lambda-Ausdruck enthielt , tatsächlich mit anderen Worten aufgerufen
wird. Es wird dieses Stück Karte hier laufen, es sei denn, der gesamte Punkt der Lambda-Ausdrücke lief wirklich um Kartenblöcke herum, wie wir bereits gesagt haben. Also nur um zu beweisen, dass, wenn ich mit der rechten Maustaste klicke und Sie rennen meine Männer, sollten
wir erwarten, hallo gedruckt zu sehen, oder Sie können sehen, es ist die Zeichenfolge gedruckt. Hallo, also weitermachen. Wenn ich dies fortschrittlicher machen möchte, möchte
ich hier ein paar zusätzliche Sachen hinzufügen,
vielleicht eine andere Zeile, um sie nicht in geschweifte Klammern setzen und mit einer
Halbspalte enden enden müssen . An dieser Stelle
habe ich die Möglichkeit, mehrere Zeilen innerhalb dieses Lander-Ausdrucks bereitzustellen. Also, zum Beispiel, hier könnte ich sagen, String Name gleich mutt auf Hallo, Das ist ein Messer. Ich renne wieder. Wir sollten Hallo sehen. Mapping erstellt. Das ist also die Art, mehrere Zeilen im Inneren haben zu können. Alle unter dem Ausdruck. Nun, im Allgemeinen, möchten
Sie Ihre Darlehensausdrücke so prägnant wie möglich haben. Sie möchten also wirklich mehr auf Ausdrücke wie Ein-Liner zurücklehnen. Wenn Sie Einsicht mögen, Lander-Ausdrücke im Gegensatz zu vielen verschiedenen Aussagen im Körper eines Lambda-Ausdrucks zu haben, der allgemein als schlechte Praxis angesehen wird. jedoch da, Es istjedoch da,wenn Sie es brauchen, also lohnt es sich, darauf hinzuweisen. Das ist also eine nette Einführung in Lambda Expressions, Syntax und wie wir Lunder Ausdrücke auf Funktionsschnittstellen zuweisen können. In den nächsten Videos graben ein wenig tiefer und bringen die Dinge auf die nächste Ebene.
19. 19 Nachbildung: Okay, also haben wir jetzt im Grunde unter Ausdruck gesehen. Also schauen wir uns nun einige Zahlenausdrücke an, die er verschiedene funktionale Schnittstellen war. Wenn wir also nur einen Parameter
übergeben, müssen wir keine Klammern verwenden. Wir verwenden nur Klammern, wenn entweder mehrere Parameter übergeben wurden, in diesem Fall haben wir diese Parameter durch Komma getrennt wie ein B c de diese Art von Sache, oder in dem Fall, wo wir überhaupt keine Parameter haben. Also war es in diesem Fall etwas dort zu haben, wegen der Art, wie es vom Compiler nicht möglich ist. jedoch Wenn wirjedochnur einen Parameter haben
, der übergeben wird, müssen wir die Klammern nicht verwenden. Also lasst uns das jetzt machen. Lassen Sie uns den Namen in den Holzausdruck geben, also lassen Sie uns das loswerden und wir werden diese beiden loswerden. Wir haben nur einen einfachen Liner unter Ausdruck, und Sie könnten an dieser Stelle sehen, dass nicht funktioniert. Also lassen Sie uns den Mauszeiger über und sehen, warum. Es sagt inkompatible Parametertypen in Lambda-Ausdruck. Falsche Anzahl von Parametern erwartet Null gefunden eins. Und der Grund dafür ist, dass der Compiler diesen Lunder-Ausdruck hier überprüft. Der Funktionsdeskriptor dessen, was er kennt, nimmt eine Zeichenfolge als Eingabeparameter, und der Grund, warum er weiß, dass es sich
um eine Zeichenfolge handelt, liegt übrigens an dem Kontext, in dem hier verwendet wird. Der Compiler kommt also weiter, weil hier fesselnde Strings arbeiten, ist
dieser Funktionsdeskriptor
,der eine Zeichenfolge annimmt,
nicht kompatibel mit unglaublichen. dieser Funktionsdeskriptor
, der eine Zeichenfolge annimmt, Und das ist, weil zugänglich. Suchen Sie hier. Es braucht keine Schnur. Also, wenn wir das ändern und in String setzen könnten, was wir dazu führen können, dass es nur sein Vater gelesen hat, dann würde es es beheben. Also lasst uns etwas Ähnliches machen. Lassen Sie uns das einfach kopieren. Also kopieren wir diese beschreibbare Schnittstelle, mit der wir hier sprechen. Nennen wir es etwas anderes. Lasst uns eine Schnur mieten. Es ist ein schrecklicher Name, aber nur im Interesse der Demo und löschen Sie den Job Talk. Das brauchen wir nicht. Also, wenn ich hier gewinnbar sein könnte, würde
er die gleichen Epochen bekommen, die wir vorher hatten. Aber jetzt wird er sehen, ob ich dies mache, wenn ich diese Methode in der Funktionsschnittstelle aktualisiere, um eine
Zeichenfolge zu nehmen . Dieser Fehler ist nun weiter gegangen. Die Luft ist jetzt verschwunden, weil in der Tat, String gewinnt seine Funktion. Deskriptor nimmt die Stärke auf den unter-Ausdruck. Auch Texas, während der hier ist sein Name. - Natürlich. Jetzt haben wir hier ein Problem zu dem Problem hier, wo es sagt, String in String ausführen, beschreibbar kann nicht angewendet werden und es gibt diese leeren Klammern. Was sie sagen, ist, dass Sie diese Methode jetzt nicht aufrufen können, ohne etwas einzugeben. Das liegt daran, dass es tatsächlich Eingabeparameter nehmen muss. Wir müssen den Namen einreichen. Also, jetzt tippen wir für Sie Matt. Alles kompiliert. Und das liegt daran, dass wir jetzt den String-Parameter übergeben. Wenn wir die Funktion aufgerufen haben, die in diesem Holzausdruck auf alles gehalten wird, ist
viel schön die Funktionsdeskriptoren übereinstimmen Methodensignaturen. Die Parameter wurden viel übergeben. Alles ist gut, außer einem Messer. Ich kontrolliere unsere, um zu rennen. Dann erhalten wir den gleichen Effekt wie zuvor, also erhalten wir jetzt den gleichen Effekt. Es steht immer noch:
Hallo, Hallo, Matt, aber es ist nur, dass wir es auf eine andere Art und Weise haben. Welche Art von Riff hat die Dinge leicht gehandelt? Alle überarbeiteten sie eher sozial. Wir haben die Funktionsschnittstelle angepasst, um den Bedarf an den Landerausdruck zu erfüllen. Mit anderen Worten, ein Lander-Ausdruck nahm einen Eingabeparameter, Also haben wir die Pilz-Schnittstelle angepasst, um diesen Parameter zu nehmen. Dies zeigt Ihnen
übrigens auch , wie Sie eine Funktionsschnittstelle erstellen. Sie können hier sehen. Wir haben diese App-Funktionsschnittstellensanitation erklärt es nur als funktionale Schnittstelle auf Wir haben diese abstrakte Methode hier, also hat freundliche Schnittstelle im Allgemeinen nur eine abstrakte Methode der so genannten einzelnen abstrakten Methode und optional. Sie können diese Funktionsschnittstellen-Annotation auf der Schnittstelle selbst übergeben. Die Funktionsfläche benötigt nicht, dass diese Anmerkung nicht benötigt wird. Aber es ist nur die Suche des Compilers kann Fehler abfangen. Also, zum Beispiel, wenn ich beginne, hier eine Methode hinzuzufügen, wie String Gruß tun, dann werden wir diesen Compiler hier bekommen, es sagt mehrere, keine abstrakten Methoden zu schreiben, die in der Schnittstelle gefunden wurden bedeutet, im Grunde ist nicht mehr als eine einzelne abstrakte Methode in die Fox-Schnittstelle zu setzen. Andernfalls ist
es keine Funktionsschnittstelle, also da das alles in Ordnung ist, wir in diesem Video gesehen, wie wir ein vorhandenes Zahlenausdruck-Refektorium nehmen können, um einen Eingabeparameter zu übergeben und vorhandene -Funktionsschnittstelle verwenden, um einen passenden Zieltyp für diesen Lander-Ausdruck auf bereitzustellen. Wie Sie sehen können, ist
es nicht allzu schwer zu tun. Und wenn Sie mit Funktionsschnittstellen unter Ausdrücken sicherer werden, werden
Sie feststellen, dass es ziemlich einfach ist, vorhandene Funktionsschnittstellen aus dem Java Util dieses Funktionspaket, aka Iran-Funktionsschnittstellen wie die wir hier gesehen haben.
20. 20 Zieltypen für eine a: Das letzte, was ich Ihnen zeigen möchte, ist die Tatsache, dass der Lander-Ausdruck tatsächlich
mit mehreren Funktionsschnittstellen verwendet werden kann , nicht nur an eine bestimmte Finanzschnittstelle gebunden ist. Sie können es mit mehreren verwenden. Also lassen Sie uns sehen, dass jetzt Lassen Sie uns neu erstellen, was wir zuvor hatten. Ursprünglich. Sie können sehen, dass wir diese einfache unter Ausdruck haben. Nimmt keine Eingabe an, gibt nichts zurück. Wir haben uns entschieden, einen Ball zu laufen. Wir wissen, wie das jetzt funktioniert. - Das ist in Ordnung. Wenn wir unsere eigene Funktionsschnittstelle erstellen. Lassen Sie uns nun gehen, um sie auszuführen und geben Sie ihm eine Methode, die die gleiche Funktion hat. Deskriptor. Lassen Sie uns nennen, dass es ausgeführt wird und nur aus Gründen der Vollständigkeit. Aber ihre Funktion in der Raumentsorgung auf nur eine Art doppelter überprüfen Sie es, wenn wir mit
ihm gesprochen haben . Jetzt haben wir hier eine neue Funktionsschnittstelle erstellt und er hat eine andere Methode. Diese Methode ist also ein anderer Name. Es wird ausgeführt genannt. Das Unglaubliche heißt „Run“. jedoch Sie habenjedochden gleichen Funktionsdeskriptor. Sie nehmen also keine Eingabeparameter oder irgendwelche Eingabeparameter und geben nichts zurück. Das bedeutet also
, vielleicht überraschend, vielleicht überraschend, dass ich das tun könnte. Führen Sie er in dem war, den ich gerade in meinem Paket erstellt habe, nicht den Bewegungsjob, den Sie zwei gleichzeitige Funktion gleich haben, und kopieren Sie dann denselben Lunder Ausdruck, und Sie können sehen, dass auch völlig in Ordnung ist. Und das ist eine nette Sache mit Lambda. Ausdrücke verpackten wirklich nur einen Teil Code, und ich gebe ihnen die Möglichkeit, ihn in den Kontext zu übergeben, den er passt. Also wollte ich nur darauf hinweisen, dass Sie einen Kreditgeber Ausdrücke in vielen verschiedenen Pilzversen zuweisen können. Es ist nicht nur ein 11-Mapping zwischen einem bestimmten Holzausdruck muss eine bestimmte
fokale Schnittstelle nehmen . Es ist nicht so, dass es viel lockerer ist, wie wir gesehen haben, und wenn man dem ausgesetzt ist, wenn man es nach einer Weile gewohnt
ist, offensichtlich ein bisschen wie ein Paradigmenwechsel. Aber wenn Sie dem ausgesetzt sind und Sie geistig an Bord genommen haben, dann ermöglicht es Ihnen wirklich, über das Schneiden auf einer funktionalen Ebene nachzudenken, was einer der großen Vorteile von Job ist, wie wir gesehen haben
21. 21 Nachdruck: Also in diesem Video werden
wir einen Blick auf Methodenreferenzen auf Sehen, wie wir sie in Aktion verwenden können, da es manchmal ein wenig abstrakt sein könnte, wenn Sie zum ersten Mal anfangen, Ihren Kopf
um sie zu bekommen . Und so werden wir nur Demo sie hier in der Lage sein, aus erster Hand genau zu sehen, wie die Arbeit. Lassen Sie uns also beginnen, indem wir uns eine einfache Methodenreferenz ansehen. Okay, also haben wir die Consumer-Schnittstelle schon mal gesehen. Das ist eine Consumer-Funktionsschnittstelle, die ist. Also, wenn ich jetzt Consumer Hope String bekomme, importiere das
einfach, ich werde nur sagen, das ist Greta zustimmen, jetzt zu funktionieren. Wir haben zuvor im Abschnitt unter Ausdrücken gesehen, dass wir der Funktionsschnittstelle einen Darlehensausdruck
zuweisen können , und wir wissen, dass die Verbraucherschnittstelle außer dem Parameter, aber nichts zurückgibt. Also überprüfen Sie einfach, dass, wenn wir den Befehl drücken und klicken Sie auf den Verbraucher und überprüfen Sie die Schnittstelle, die wir hier unten sehen können. Wir haben das außer Methode. Es gibt also, außer einem Parameterangebot gegebene Zeit, mit der es aufgerufen wird, nichts zurück, also wenn Sie es schließen könnten, könnten
wir eine Zeichenfolge übergeben, so dass Sie den Körper des Unterausdrucks nur über Druck grüßen -Linie. Ich sollte nur auf den Gruß selbst aus Grubendruck hinweisen, alles andere mit einem Semikolon zu beenden. Also in dieser Phase haben wir den Darlehensausdruck gesehen
, der einer entsprechenden faktischen Schnittstelle zugewiesen werden könnte. Daran ist nichts überraschend. Wir haben diese Art von Sache während des Kurses gesehen, also kann
ich mit Methodenreferenzen tatsächlich dazu realisieren. Anstatt den Darlehensausdruck hier einzugeben, kann
ich das einfach entfernen und es dahin ändern. Und das ist jetzt die entsprechende Methodenreferenz. Also die Methodenreferenz, die dem unter Ausdruck entspricht. Und übrigens, wenn ich es gerade von Grund auf neu eingegeben habe, so System, um Colon aufzurufen,
dann, wenn ich die zweite Kälte stelle und dort kann man sehen, Intelligent gibt uns eine Liste von Methoden, die auf den Outs sind, Objekte innerhalb der Systemklasse. Also dann gleitet es mit, wie Linie zu drucken. Wie auch immer Sie dazu kommen, ob Sie es direkt aus dem Referenzmythos indirekt eingeben,
das heißt, das heißt, oder wenn Sie mit dem Unterausdruck beginnen und dann nach der Tatsache auf die entsprechende Methode zurückkehren referenzieren die Effekte. Das gleiche zu dem Schlüsselteil hier ist, dass wir anstelle des
Landerausdrucks eine Methodenreferenz verwenden können und dann der entsprechenden Funktionsschnittstelle zugewiesen wird. Also könnte ich dann die Methode aufrufen, mit Ausnahme dieses Textes hier einzugeben. Wenn ich das ausführe, werden
wir sehen, dass es aufgerufen wurde, weil er hier Hallo von einer Methodenreferenz. Das ist also nur eine Demonstration einer sehr einfachen Wieder Factoring schwächen aufgrund eines
vorhandenen Landerausdrucks durch seine entsprechende Methodenreferenz zu ersetzen . Einstellen dieser Art von kleinen Wieder Fakt Ringe, wie Sie entlang gehen. Wir machen es zu beschichten noch sauberer sagt, dass es üben könnte, in zu kommen, aber es ist prägnanter, auch.
22. 22 Programmieren: Also lassen Sie uns jetzt etwas Strom schreiben mit der Consumer-Funktionsschnittstelle, also kam zurück zum I.
D.
Ich D. kann Verbraucher von String-Intelligenz schreiben, was vorschlägt, dass ich das importiere, was wahr ist. Das ist die Funktion in der Raumzeit,
der Job, den Sie Funktionspaket oder Finanzschnittstellen angegeben haben. Aaron dieses Paket, übrigens,
zumindest eine gemeinsame Menge, obwohl es andere Funktionsschnittstellen gibt, die um die Jedi K verstreut sind, wie in der Venable-Schnittstelle, die wir früher gesehen haben. Also mache ich alles Zentrum, um das Wichtige zu bringen. Also, wenn ich zum Verbraucher gehe, können
Sie außer einem Eingabeparameter sehen. Das bedeutet also, dass mein Lunder-Ausdruck einen Parameter akzeptieren muss. In diesem Fall wird
es eine Zeichenfolge akzeptieren. Also hier haben wir einen Eingabeparameter Früchte, und wir tun dies einfach aus Drucklinie wieder,
die sagen, ist mein Lieblings-Lieblingsfrüchte ist, und dann das vielversprechende an ihm vorbei. Also dann wissen wir, dass wir es mit aufrufen können. Außer, dass dies die Methode war, die definiert ist, eher die einzelne abstrakte Methode, die auf der Verbraucherpilz-Schnittstelle definiert ist weil wir sie mit dem String-Typ eingegeben haben, den Sie oben sehen können Wir haben Verbraucher von String wegen Zeiten von der String-Typ. Wir müssen jetzt eine Zeichenfolge übergeben, also sagen Sie einfach Paar, zum Beispiel. Und wenn wir das laufen, dass Sie sehen können, sagt es doch meine Lieblingsfrucht ist Paar, aber von einem anderen Typ. Wir waren mein Favorit von seinem Schmerz. Okay, das ist der Consumer Interface Consumer. Es braucht einen Eingabeparameter, der schön und einfach ist, auf einer sehr gemeinsamen
Funktionsschnittstelle zu implementieren , die wie wir könnten verwenden wird.
23. 23 Programmieren: Sehen wir uns nun an, wie wir eine Versorgung, eine funktionale Schnittstelle verwenden können und wie wir das mit einem Lambda-Ausdruck verwenden können. Also erinnern wir uns an sie mit einem Vorrat. Eine funktionale Schnittstelle gibt Probleme, um Werte zurückzugeben, so dass keine Eingabe akzeptiert wird. Aber stattdessen kehrt es bei der Ausgabe zurück. Also haben sie gerade einen schnellen Lieferanten von Interviews angerufen. Zum Beispiel Lieferant. Ich bin ein Aufständiger. Die Antwort, um den Funktionsschnittstellenlieferanten zu ziehen, ist gleich. Jetzt hier. Es nimmt nichts als Eingabeparameter. Deshalb müssen
wir die leeren Klammern haben, die wir vorher gesehen haben, und jetzt können wir einfach etwas zurückgeben. Da wir also nicht mehrere Aussagen innerhalb des Lambda haben, genügt
es, hier nur einen Ausdruck zu setzen. Mit anderen Worten, wir brauchen das Rückgabe-Schlüsselwort nicht. jedoch Wenn wirjedochmehrere Anweisungen darin hatten, dies
zum Beispiel, zum Beispiel, so dass Sie hier eine Anweisung bemerken, um eine Anweisung innerhalb der geschweiften Klammern zu machen, müssen
Sie eine Rückkehr dort setzen. Natürlich, jetzt ist es toll aus dem Grund, warum es großartige Stunden sind, weil intelligente Idee, die Sie vorschlagen, dass Sie das tatsächlich vereinfachen und es besser machen, indem Sie diesen ganzen
Stemmingblock hier durch einen Ausdruck mit anderen Worten ersetzen zurück zu, wie wir vorher waren, Sehen Sie, ob ich uns, Control sagte. Da gehen wir hin. Also jetzt, wenn ich diesen Lieferanten anrufen, bekommen
Sie nicht, dass es zurückkehren wird. Wir zeigen den Mauszeiger hier, wir werden sehen, dass es eine ganze Zahl zurückgibt, so dass ich das ausdrucken kann, nur so dass wir etwas
auf der Konsole wieder laufen sehen können und dann sehen wir. Der zurückgegebene Wert entspricht 42. Das ist Verbraucher und Lieferant
, diese Art von Gegensätzen von einander. Wenn du ein Geschlecht magst und im Pop gibt man einen Ausgang zurück. Aber natürlich haben
wir nicht nur diese Arten von Methoden. Indikationen, die wir tatsächlich richtige Funktionen für eine Funktion haben, ist
im Grunde etwas, das einige Eingaben nimmt und eine Ausgabe zurückgibt. Schauen wir uns die Funktionsschnittstelle als nächstes an, die wir im nächsten Video sehen werden.
24. 24 Programmieren: Also, jetzt haben wir einen Blick auf die Consumer und Supplier Funktion Interface gehabt ist der nächste logische Schritt ist, auf die Funktionsfunktionsschnittstelle zu schauen. Dies kombiniert tatsächlich die Einnahme einer Eingabe bei der Rückgabe einer Ausgabe, bis sie das jetzt sehen. Also zurück in der Idee, erstellen
wir eine Funktion, haben eine Zeichenfolge und eine ganze Zahl, und das wird eine Zeichenfolge nehmen. Lassen Sie uns den Namen einer Person sehen, wenn wir kleinen Tipp hier. Wenn Sie gedrückt halten, befehlen oder steuern, wenn Sie einen Windows-Machine-Befehl verwenden. Wenn Ihr Mac mit dem Mauszeiger über den Variablennamen
bewegt, sehen Sie, dass es Tony ist, eventueller Typ seiner abgeleiteten. Nur hier Kraft abgeleitet. Wenn Sie also eine funktionale Schnittstelle sehen, ist
das erste Argument immer der Eingabetyp an. Die 2. 1 ist der Ausgabetyp, also müssen wir jetzt eine ganze Zahl zurückgeben. Lassen Sie uns es ein wenig vermischen auf Lasst uns diese stattdessen invertieren. Also sagen wir Integer und String. Sagen wir einfach, wir gehen im Alter von jemandem vorbei. Jetzt können wir sehen, wenn wir den Mauszeiger über, erwarten
wir eine ganze Zahl, also wenn jemand in der Zeit passiert, werden
wir hier einen Ausdruck haben. Das Alter ist größer als 21. So kannst du weiterfahren. Wenn es unter 21 ist, sagen wir etwas anderes. Nehmen wir an, das ist eine Art Gesetz in einem bestimmten Staat in Amerika, wo nur, wenn Sie über 21 sind, das sollte die Ricotta für jeden sein. Dann kannst du fahren. Sonst dürfen Sie nicht fahren. Also, wenn wir ausdrucken wollten, was das Ergebnis ist Spiel, wir könnten einfach da über Druckzeilenfunktion tun und es anwenden Drücken in, zum Beispiel, 17 und wir übergeben es in 17. Wir erwarten, dass wir die Botschaft sehen. Sieht aus, als würden Sie einen Moment gehen Pass in 32 erwarten zu sehen, dass Sie fahren können,
sehen, ob ich jetzt renne. Ja, sie sieht so aus, als würdest du laufen und fahren können. Das ist also die Funktionsfunktionsschnittstelle an. Wie Sie sehen können, ist
es ziemlich einfach zu programmieren. Sie müssen sich nur an die Reihenfolge der Typparameter auf der Funktionsschnittstelle
selbst erinnern . 1. 1 ist die Eingabe für die Funktion auf der 2. 1 ist die Ausgabe von der Funktion, aber schön und einfach, wie wir gesehen haben
25. 25 Programmieren: so dass Verbraucher, Lieferanten und sogar Funktionen. Aber jetzt bekommen wir ein gutes Verständnis dafür, wie diese Funktionsschnittstellen auf der nächsten werden wir sehen, welche Demo jetzt das Prädikat ist. Also, ich schneide ziemlich Funktionsschnittstelle ist etwas, das einen Ausdruck annimmt und einen
booleschen Wert basierend auf meinem Ausdruck zurückgibt . Also lassen Sie uns das in Aktion sehen. Jetzt ist das ein kritischer Ausweg. Lassen Sie uns das ein bisschen interessanter machen. Machen wir es zu einem Raubtier einer Klasse. Also, wenn ich hier eine neue Klasse erschaffe Person,
ähm,
Person hat einen Namen in ähm, einem Alter, sagen
wir, es ist eine pratica off person. Wir müssen nicht immer J T K-Typen übergeben. Wir können in Dritte durch Typen oder unsere auf Typen als auch übergeben. Also hier gehen wir persönlich vorbei. Also, was hier passieren wird, ist, was es tut. Das wird ein Weg sein, zu entscheiden, ob etwas wahr oder falsch über die Person ist. So zum Beispiel eine Pediküre haben, könnten
wir
zum Beispiel eine Pediküre haben,die alt ist oder Teilchen, die jung ist,
zum Beispiel, zum Beispiel, oder sein Teenager oder was auch immer. Und auch für dieses Beispiel wollen
wir Kredit Cup begrenzen wird es nennen. Etwas beschreibenderes. Sie war also das Vorbild. Ist das Rentenalter in Ordnung, hier wird eine Person so Person nehmen, und wir werden sagen, Person Zehenalter größer als gleich, sagen 65. Beginnen
Sie, halten Sie die Befehlstaste gedrückt und schauen Sie sich die Eingabeparameter an. Und Lambda. Sie können sehen, dass es von unserem statischen Klassenpersonentyp ist und Sie können im Körper des Holzes
hier sehen , was sie auf ein Feld von diesem Personentyp zugreift. Also, was das sagt, ist, wenn eine Person, die älter als oder gleich 65 ist Wenn das wahr ist , dann wird das Ergebnis der Berufung auf dies wahr sein. Wenn es falsch ist, wird
das falsch sein. Wir könnten eine andere Art von Kreditkarte vor dem Telefonverzeichnis erstellen. So haben wir zum Beispiel ein Telefonverzeichnis mit Namen und Nummern der Leute . Und für diesen besonderen, würden
wir nicht auf das Alter schauen. Sie werden sich tatsächlich den Namen ansehen. Also vielleicht für diesen möchte man sagen, dass die Person keine Sub-Zeichenfolge 0 zu 1 benennt. Also der erste Buchstabe zwei des Falles entspricht einem Zum Beispiel, es sind all die Leute, deren Namen mit einem Ich werde die Vorderseite des Telefonverzeichnisses sein . Stadtname ist Adam, zum Beispiel, Sie befinden sich in der Vorderseite des Telefonverzeichnisses. Und wenn dein Name Zoe ist, mit dem sagte, du hast den Rücken des Pfarrhauses im ersten Fall gelegt, würde
es zurückkehren. Wahr im zweiten Fall würde
es falsch zurückgeben. Probieren wir das einfach aus. Also hier einfach schnell ein konstruktives dafür setzen, nur damit wir die Variablen
einfach hier herauskommen zuweisen können . So ist vor Spaß Directory-Test, die brandneue Person, deren Name Adam ist. Er ist 25 ungetestete Zoe
, der auch 25 ist. Und wir sollten uns einen Adam-Fall ansehen. Es wird wahr sein auf, In Zoeys Fall, es wird falsch sein. Sie waren nicht wahr und falsch. Das ist auch Test Zoe zu sehen, vor allem ein Lasst uns diese zusammen. In der Tat, es macht ein bisschen klarer, plus das so, dass wir mal sehen. Es ist immer ein Rentenalter. Ist Ari im Ruhestand? Mal sehen, ist Bernard im Ruhestand? Amber wird eine neue Person sein, und er ist 67, so dass, wenn wir rennen, das ist ein Rentner ist falsch. Auf seinem Bernard ist
pensioniert wahr, so dass Sie sehen können, dass wir nicht nur die Prädikatfunktion Schnittstelle verwenden können, sondern in der Tat jede Funktionsschnittstelle mit anderen Typen. Also entweder die Standard-JD-Pflegetypen oder die schnellen Typen, die Primitive spiegeln, die wir so in doppeltem Schwimmer von Dingen
haben, unsere eigenen Typen aus der Nachfrage unserer eigenen Anwendungen. Dies liegt an der Tatsache, dass es diese generischen Funktionsschnittstellen gibt, die
in Java vorhanden sind , dass Sie diese Funktion gesagt haben. So wie auch immer, das war eine Demo darüber, wie man die Prädikatfunktion Schnittstelle verwendet. Und jetzt sollten
Sie in einer Position sein, in der wir beginnen können, die Fokusschnittstelle FBI und die
verschiedenen Klassen darin zu erkunden , um die richtigen Zieltypen für Ihre
Darlehensausdrücke bereitstellen zu können .
26. 26 Sammlung von a für den Ablaufprozess: in diesem Abschnitt werden
wir uns Pipelines und Streams ansehen und sehen, wie wir Sammlungen mit dem
neuen Job verarbeiten können . Acht Stream, FBI, damit wir das tun können, brauchen
wir ein paar Daten, mit denen wir tatsächlich arbeiten können. In diesem Video werden
wir einige einfache Domain-Klassen aufschneiden, die wir in eine Sammlung werfen können, so dass wir sie mit dem Stream FBI im nächsten Video verarbeiten können. Also lasst uns das jetzt machen. zunächst Lassen Sie unszunächsteine Sammlungsklasse erstellen, die einige Daten enthält, die für die Zwecke dieser Demo interessant sein könnten. Das ist also die Klasse. Haben Sie einen Schüler mit einem gerundeten Prozentsatz. Der Student hat einen Namen. Nehmen wir an, sie gehören zu einer bestimmten Klasse in dieser Klasse bereitet sie für eine bestimmte Prüfung. Also sagen wir einfach, es ist ein Hinweis auf die Prüfung jetzt. Es ist auch die Erstellung einer Prüfungsklasse, und diese einige Zusammenstöße haben einen Namen, und das ist genug für jetzt. Lassen Sie uns einen Konstruktor geben. Lassen Sie uns das hier ein verengtes, also habe ich ein sehr einfaches Nachfragemodell bekommen, mit dem wir arbeiten können. Wir haben einen Schüler, der einen bestimmten Namen hat, der für eine bestimmte Prüfung studiert und
die abgerundeten Prozentergebnisse wiederherstellt . Mit anderen Worten, eine Zahl zwischen Null und 100 für das, was sie auf dieser Prüfung bekam. Es gibt natürlich andere Möglichkeiten,
dies zu modellieren , und wir hätten diese ekstatischen Klassen sicherlich nicht. Aber der Zweck dieses Demmers, das ist in Ordnung. Wir hatten gerade ein paar statische Klassen hier, mit denen wir arbeiten können. Also, wenn wir zur Männermethode kamen, nehmen wir an, wir haben eine Liste zurück zu uns von einigen A p I, was zumindest, aber seine Liste der Studenten denkst du jetzt darüber nach? Es sind wirklich Studentenergebnisse, nicht
wahr? Also geh einfach hier runter, was diese etwas nach oben verändert hat. Sechs Studenten Studenten Prüfungsergebnisse nur genannt diese Ergebnisse, um es ein bisschen
einfacher zu machen . Okay, Linguist, Stell
dir diese Rückkehr von so meinem p I Jetzt verwenden wir eine Liste hier mit den tatsächlichen Ergebnissen die bestellt ist oder nein, wir kümmern uns nicht wirklich darum. Wir werden sie in jede Reihenfolge bringen, so semantisch, dass es ein Set ist. Aber wir verwenden diese Träne, weil, zum Beispiel, wenn wir mit Jenny BC interagieren, wir in der Regel wieder eine Liste bekommen, und der Grund dafür ist, dass die Liste in 10 kommen und Reihenfolge, wenn die Ergebnisse, die kommen zurück passiert haben in Ordnung. Zum Beispiel, wenn Sie eine Fortsetzung Anweisung hatten, die sowieso eine Bestellung haben, lassen Sie uns einige Studenten hier reinbringen. Ergebnisse, die Houston Prüfungsergebnisse Hand. Das hier hat 56. Jetzt müssen wir auch eine Prüfung bestehen. Also lasst uns einfach hier rauf gehen. Lassen Sie uns einfach ein paar Prüfungen erstellen. Es ist eine gute
Praxis, Praxis, nur um das zu kommentieren, während wir das tun. So Prüfungen se Java-Zertifizierung. Sehen wir uns Nathan 101 an, das ist wahrscheinlich nicht vorerst, was auch immer. Was auch immer es auch ist, das ist okay. Du musst also Prüfungen machen? Job-Zertifizierungsprüfung auf der Navan 101 Also jetzt können wir zurück zu hier und sagen, vom Himmel 101 Er bekam 56 nicht so gut gemacht. Tag, aber 72 auf der Java-Zertifizierung? Nein, lassen Sie uns auch eine Mischung aus ein paar anderen geben. Ein paar Studenten. Sagen wir einfach auf einer Rechnung. Ich habe auch das gleiche Ergebnis bei der Versauerung von Arbeitsplätzen. Der Zufall Gareth wird sich
auch hier ändern , Michael 12. Oder vielleicht ist ein Eins gegangen. Aber bei seinem Job, eine Zertifizierung, die er 88 bekam, wird auch eine andere werfen. Warum nicht eines der einen Apache Essentials? Immer noch dieser hier. Wir haben also vernünftige Daten, mit denen wir arbeiten können. Lasst uns nur eine zwei Schnur darauf setzen, damit wir sehen können, was passiert, wenn wir den
Berg zu Schnur drucken . Das ist auch in Ordnung mit zwei Saiten in der Prüfung, nur um die Dinge ordentlich zu halten, damit wir sehen können, was los ist. Lasst uns das herausziehen. Re Fekter Extrakt auf eine andere Methode. Erhalten Sie Schülerergebnisse. Andi, wenn wir hier über schweben, machen
sie es einfach zurück Die Listenergebnisse sind, die vermeiden und dann zurückgegeben werden? Diese Ergebnisse bedeuten es. Jetzt haben sie diese alle Schülerergebnisse. Nennen Sie es einfach Ergebnisse. Vermutlich halten Sie es einfach. Lassen Sie uns sie einfach ausdrucken, damit wir wissen, womit wir arbeiten und diese Man-Methode dort ausführen . Wir können unten sehen, dass wir einige Daten haben, mit denen wir tatsächlich arbeiten können. Und wenn ich hier einen Haltepunkt setze und ihn stattdessen debugge, könnte
es schöner sein, in die Debug-Ansicht zu schauen, die wir hier sehen können. Wir haben die Ergebnisse. Linguistisches Objekt mit sechs innen hier drin, wir haben alle Ergebnisse, die mit OK arbeiteten. jedoch Wenn wir diese Bedarfsobjektejedochinnerhalb von Sammlungen
aktivieren, wenn Sie eine Gleichheit testen möchten, werden
diese Arten von Dingen miteinander verglichen. Dann sollten wir auch Gleichheits- und Hash-Code implementieren. Also gehen Sie einfach zu hier gleich und Hash-Code. Als Nächstes. Als nächstes machen
wir das Gleiche mit ja, es wird nicht im Hash-Code gleich sein, was bedeutet, dass diese Einwände verlangen. Jetzt sollen Verhaltensweisen verhalten, weil wir innerhalb der Sammlungsklassen erwarten. OK, jetzt haben wir diese Bedarfsobjekte gezählt und in eine Sammlung platziert. Sie sehen, wie wir sie mit den Streams verarbeiten können. FBI, die im nächsten Video
27. 27 Programmierung: So haben wir im letzten Video gesehen, dass wir eine Sammlung von einfachen Demand-Objekten aufgebaut haben. in diesem Video an, Sehen
wir unsin diesem Video an,wie es diese Sammlung mit dem Streams FBI verarbeiten kann. Lassen Sie uns also darüber nachdenken, was wir mit diesen Ergebnissen machen könnten. Ich will nicht alle Leute herausfinden, die mehr als 70% bekommen haben, weil sie zum nächsten Kurs
gehen können . Um das zu tun, ist eine Liste auf dem am wenigsten schwächen Zielstrom, den Sie hier sehen könnten, erhalten
wir einen Strom von Studenten Prüfung YSL, was bedeutet, dass jetzt, wenn wir in Strom schauen, es gibt diesen Stream-Methode Befehl von 12. An diesem Punkt haben
wir alle diese Methoden, die wir aufrufen können, um das Streaming irgendwo zu verarbeiten, viel jede Übereinstimmung unterscheidet. Finden Sie jede feine zuerst für jede Karte, diese Art von Dingen. Also, wenn wir die Schüler bekommen wollen, die über 70% haben, dann schon zu tun ist, zu filtern und wir werden in einem auf das Prädikat beruhenden, müssen Sie sehen, eine Art von
Schülerprüfungsergebnisse oder eine seiner Unterklassen nehmen . Wir haben keinen Überschuss. Es ist so bald hier Prüfung. Es wird schon gut. Und das Prädikat wird einen Boolean zurückgeben. Jemand geht zur Filtermethode, nur dass wir auf derselben Seite sind. Wir können ihn sehen, wenn wir filtern. Es nimmt diese hübsche Tasse auf dem Projekt hat diese Funktion hier Test, der einen
einzelnen Parameter nimmt , und er kann auswerten, was Sie für diesen Parameter auswerten möchten. Also wird er den abgerundeten Prozentsatz innerhalb einer Studentenprüfung bewerten. Ergebnis auf es gibt eine 1.000.000.000, die wahr oder falsch sein wird. Also lasst uns das Prädikat dafür korrigieren. Lassen Sie uns das gleiche Ergebnis. Und jetzt, wenn wir dieses Ergebnis haben, können
wir auf Methoden zugreifen sind Eigenschaften, oder? Also wird er um den Prozentsatz sagen und wir werden filtern, wo der abgerundete Prozentsatz größer oder gleich 70 ist. Also gehen wir wieder zu filtern, halten Sie den Befehl gedrückt und Mauszeiger über die Filtermethode. Hier können wir die Stream-Verkettung in Aktion sehen. Also haben wir Filter aufgerufen
, der nicht Zwischenbetrieb ist, weil dies der Stream des
Grundes dafür zurückkehrt , wie wir vorher gesehen haben, damit wir
weitermachen können und wir andere Verarbeitung fortsetzen können , wenn wir müssen. Also lasst uns das einfach machen. Lassen Sie uns die Namen von Leuten finden, die über 70 gehen. Um dies zu tun, können wir eine Punktkarte machen, die eine weitere Zwischenoperation auf Now ist. Wenn wir dies tun, wird
eine Karte seine Akzeptanz Funktion sehen, die die Studentenprüfung akzeptiert, Russell und einige der Art, die dieses Fragezeichen unsere auf seinen Tun Nächte erweitert
, die erfassen , weil es dann einen Strom drehen wird unseres Also, zum Beispiel, wenn wir den Namen zurückgeben, dass es eine Zeichenfolge sein wird, so dass es einen String-Stream zurückgeben würde , und von da an können Sie nur auf alles zugreifen, was für eine Stream-Bounty auf den
String-Typ anwendbar ist, wie wir sehen werden. So könnte das jetzt irgendwie komplex aussehen. Ich denke, es wurde ein bisschen komplex in der Kartenmethode. Wir haben diese Funktion Fragezeichen Super Student Prüfung. Russell Frage. Mark erweitert Unser Stream sind, aber vergessen Sie nicht, dass dies nur eine funktionale Schnittstelle auf der Funktionsschnittstelle ist. Fass dich überhaupt nicht an. Es ist alles, was Sie tun müssen, ist persönlich unter Ausdruck, der dieser funktionalen Schnittstelle entspricht. Also, um es zu brechen, eine Funktion, die wir gesagt haben, oder eine andere Funktionsfunktionsschnittstelle hat zwei Parameter dazu. Der erste ist der Eingabeparameter. Das ist, was wir in diesem Fall an die Funktion an den Holzausdruck und die zweiten Parameter übergeben. Was wir von dieser Funktion von diesem Landler Ausdruck zurückgeben, also müssen wir
jetzt tun , ist in dieser Karte eine Funktion auf der Karte zu übergeben, eine Funktion, die Sie hier sehen werden, Funktion , Schnittstelle. Sie erinnern sich, dass die Funktion zwei Argumente hat. Das erste, was ist die Eingabe in die Funktion, die in diesem Fall ist ein Student untersucht alle auf dem zweiten Argument ist das Ergebnis dieser Funktion. Also die Ausgabe der Funktion Dies bedeutet, dass wir einen Darlehensausdruck wie diesen schreiben können. Das ist eine Erhöhung für Ergebnisse. Und wir werden zurückkehren Strahlen nicht nennen. Offensichtlich greife ich
hier direkt auf das Feld zu. Es ist eine Demo-Klasse kann auf die Felder auf der statischen in den Klassen zugreifen, aber ähnlich ist es gut, Sie können stattdessen auch die eigentliche Methode verwenden. Also, zum Beispiel, wenn ich zufällig hinzufügen, holen Sie jemanden hier für den Namen. Aber ich könnte auch nicht bekommen Namen so an dieser Stelle wird ein bisschen unhandlich. Es ist eine große, lange Schlange. Also, was ich mochte, seine Ergebnisse zu tun, gekrönt Strom auf dem Unglauben dort, die
Hälfte der einzelnen Aufrufe gegen das Stream-Objekt. Also fühle dich nicht zu hier. Keine Karte hier, und jetzt werden wir einen Sammler benutzen. Wir werden die 2. 1 benutzen, die weiß, wie man das zu einem Set zusammensetzt. Es ist ein Zeichen, dass auch zu beurteilen. Also jetzt sind wir und haben eine Reihe von String. Pam wird in der Lage sein, das auszudrucken. Lassen Sie uns für jeden tun
, der jetzt einen Verbraucher konsumiert, Sie werden sich nur erinnern, um zu funktionieren, was einen Parameter nimmt, und wir können System aus Front als Methodenreferenz verwenden. Wenn wir das jetzt ausführen, ist
es eine ganze Menge Code. Das weiß ich zu schätzen. Ich bin froh, dass du mit uns trägst, um es durchzukommen zu können. Wenn ich auf Run klicke, könntest
du sehen, dass Top-Studenten Gareth und Annabelle sind. Mein letztes Ding auch. Apropos Methodenreferenzen ist, dass wir jetzt hier weiter gehen können. Dies ist ein Londoner Ausdruck, aber ich kann dies nicht durch einen Methodenverweis auf die Ergebnisse der Studentenprüfung ersetzen. Also, hier geht's. Ergebnis der Schülerprüfung. Gemeinsame Doppelpunkt bekommen sie und wir laufen und wir haben die gleiche Wirkung. Ich bin endlich das, was wir tun können, wenn nur
um das anzuordnen, ähm, wir können einfach hier angegriffen werden. Dann sortiert, werden
Sie die Preise wieder stromaufwärts sehen, da es sich um eine Zwischenoperation handelt, also ist es kein Terminal. Also, dann müssen wir noch diese sammeln. Aber dieses Mal, anstatt es Sammler zu sein, welche intelligenten Ideen automatisch in für uns setzen. Und dann sagt es, warum mit sorted Weil es eingestellt ist, hängt es nicht vom Salzwasser . Es gibt also keinen Sinn, der wahr ist, aber intelligente Idee im natürlichen Kampf springen die Waffe dort . Wenn wir stattdessen eine Liste setzen, die die Reihenfolge respektiert, dann könnten wir einfach tun, um aufzulisten und jetzt sollten wir finden Die Top-Studenten sind in
alphabetischer Reihenfolge aufgeführt . Also, anderen
Worten, Annabelle sollte vor Gareth kommen, was wahr ist. heißt, die Gareth kam oben in ein paar der Dinge, die Sie tatsächlich ein paar Wiederholungen von Gareth jetzt, die vielleicht wollen wir nicht geschehen haben, so können wir auch in einem anderen hier stecken , was der Punkt unterscheidet sich hierbei alle Duplikate. Also, jetzt kontrollieren wir unsere Sie können sehen, die Top-Studenten sind Tier und Gareth, so dass das ist eine gute Einführung in, wie Sie Pipelines und Streams verwenden können. Vergiss es nicht. Wenn Sie diese Art von Sachen verwenden, beziehen Sie sich auf das Java-Dokument. keine Angst, in die einzelnen Stream-Methoden die Zwischen- oder
Terminal-Operationen zu klicken und auch Intel,
Ajay oder Eclipses Typ auf Reflexionsempfehlungen zu verwenden , um herauszufinden, was zu tun ist und bekommt eine schöne, sauberer, prägnanter, funktionaler Code. Und so verarbeiten Sie Sammlungen. Die Streams werden angezeigt.
28. 28 Coding mit Richtungs- und ungebunden Instance zur Einrichtung von with: Also in diesen nächsten Videos gehen wir durch und werfen einen Blick auf Methodenreferenzen im Detail auf Vergleichen Sie die verschiedenen Typen, die wir auf der ersten Art von Methodenreferenzen haben, die wir auf unsere Instanz schauen werden . Methodenreferenzen. Lassen Sie uns also beginnen, indem wir uns die Methodenreferenz ansehen, zu der wir kamen, wenn wir versuchen, einen Lander-Ausdruck in seine entsprechende Methodenreferenz neu zu faktorieren. Lassen Sie uns einfach darüber nachdenken, welche Art von Methodenreferenz dies für eine Sekunde ist. Du erinnerst dich. Wir haben verschiedene Arten von statischen Methodenreferenzen, gebunden und ungebunden. Instanz, Methodenreferenzen und konstruiert durch die Referenzen, die darüber nachdenken, welchen Typ es ist. Lass es uns einfach hier runterbrechen. Also ein System, das aus, wenn wir es nur hören wollen, wir sehen, dass Sie Systeme raus. Was tatsächlich repräsentiert, ist ein statischer Druckstrom auf der Systemklasse, denn was es wirklich ist, es ist ein Druckstrom auf den Systemquests. jedoch Wenn wirjedochin die Druckzeile klicken, ist
dies nicht statisch, so dass dies tatsächlich eine Instanzmethode für eine Instanzmethode im Druckstrom selbst ist . Sie können hier drucken Stream sehen, also schließen Sie diese beiden wieder, so dass Dies ist irgendwie gleich, wenn wir hier nur eine Variable hätten, die
auchin der Instanzmethode
in Form einer Methodenreferenz binden würde auch . Dies stellt also nicht den statischen Methodenaufruf dar, sondern stellt tatsächlich eine Instanz dar. Methodenaufruf. jedoch Da wirjedochtatsächlich die tatsächliche Instanz übergeben, wird
sie in der Systemklasse aufgerufen, gegen die diese Druckstromreferenz ist . Das ist da für Überfluss. Instanzmethodenreferenz, da wir die Instanz binden, gegen die die Methode innerhalb der Methodenreferenz selbst
aufgerufen werden soll . Seien Sie also nicht zu verwirrt oder verwirrt von der Tatsache, dass das, was passiert, eine statische Variable in der Systemklasse ist, die ein wenig verwirrend erscheinen könnte. Ignoriere das einfach. Tu so, als wäre es nicht da. Offensichtlich ist es das andernfalls wird es nicht kompilieren, was so tun, als wäre es nicht da und konzentrieren Sie sich auf diesen Teil, um den tatsächlichen Typ von der Methodenreferenz zu bestimmen. Es ist also reichlich, Instanzmethodenreferenz, weshalb, wenn wir es ausführen, es bereits einen richtigen Print-Traum hat, zu
dem man gehen muss, was die Zeichenfolge drucken kann, die wir übergeben, wenn wir die Ausnahme -Methode. Nun, das ist eine gebundene Instanz. Methodenreferenz. Wie gesagt, es ist auf Prince Stream. Also hier wieder, klicken Sie heraus. Wir sehen, dass es ein Druckstrom ist. Ich klicke nie. Interpretierter Stream-Befehl von 12. Wir können sehen, wir haben diese Drucklinie Methoden auf Diese sind nicht statisch. Hier gibt es keine. Dies sind nur Instanzmethoden für das Druckstream-Objekt. Also kündigen Sie beide ab. Also was? Wir könnten sie machen. Seine Referenz zu drucken Stream direkt. Colin Colin Print Linie. Nun, trotz der Tatsache, dass dies aussieht, als würden wir irgendwie Drucklinie aufrufen, statisch nein, es erlaubt uns nur, eine Instanzmethode auszuwählen, jede Methode, in der Tat aus einer bestimmten Klasse. Also das ist nur sagen Wählen Sie die Methode Drucklinie aus der Prince Dream Class. Jetzt weiß der Compiler intern, dass dies keine statische Methode ist. Es ist eine Instanz. Methode auf intelligente Idee weiß, dass es ein Schwung ist. Also, wenn wir nach vorne springen, werden wir sehen, dass
wir diese kleine Hilfe ihr haben, die es uns erlauben würde, es in eine richtige Aussage zu machen, oder, nebenbei bemerkt, ist der Grund, warum das ist,
bereit, es ist keine Aussage, weil wir ihm keinen Raum zugewiesen haben. Aber wir können keine Lambda-Ausdrücke haben, die nur da draußen sind, nicht zugewiesen oder an irgendetwas zurückgegeben werden und einfach auch. Die exakt gleichen Regeln gelten für Methodenreferenzen, nur keine Anweisung der Minute. Aber Sie können es immer tun, auch wenn dieses kleine Ausrufezeichen Ding verschwindet, ist seine ultimative Eingabe. Und dann bekommen Sie diese so genannten schnellen Korrekturen, die Sie einsetzen können. Es ist also interessant, jetzt zu schauen, was passiert, wenn wir eine lokale Variable einführen wollen . Dies ist also eine kleine schnelle Lösung von intelligenten wird uns in der Lage sein, diese
Methodenreferenz einer Variablen des entsprechenden Typs zuzuweisen . Und das ist eigentlich ein ziemlich netter kleiner Power-Tipp für Sie, dass, wenn Sie jemals unsicher sind,
was der Typ sein könnte, Sie einfach zu dieser schnellen Lösung auf Ihre ausgewählten gehen könnten, und es kommt mit ein paar kompatiblen funktionalen Schnittstellen, , die mit der Funktion übereinstimmte. Deskriptor von dieser Methodenreferenz, wobei der erste am meisten bevorzugte ist, der in diesem Fall am kompatibelsten ist. Es ist ein von Consumer, also schlägt es einen Druckstrom und ein Char-Array vor. Wenn wir in die Drucklinie klicken, kopieren Sie das. 12. Lassen Sie das Riff Sie hier sehen, damit Sie sehen können, dass es eine Drucklinie gibt, die
nichts nimmt . Sie setzen Linien, die verschiedene verschiedene Primitive auf die eine nehmen, über die wir eins sind . Hier ist eine Drucklinie, die die Zeichenfolge nimmt. Das ist die, die wir bereits benutzt haben, also bleiben wir einfach daran. Bleibt an der Linie der Zeichenfolge zu drucken. Mal sehen, ob ich dem Kimanzi entkomme, um ihn zurückzuholen. Nicht in den falschen Weg Das ist besser, so könnte ich einfach hier runter gehen jetzt nehmen Die Ciara Raker haben keine Absicht, in einem char übergeben Ray kann stattdessen String setzen und geben Sie es könnte
ein besserer Name sein . Rita Funktion zu Isabella. Vielleicht trennt es es zumindest vom Original. Nun, das ist interessant. So von den Verbrauchern. Also, was tun sie das? Nun, genau wie ein Verbraucher einen in schlechtem Argument tickt, außer ein einziges Argument vom Verbraucher, Sie wahrscheinlich erraten haben, kann Argumente akzeptieren. Und der Grund, warum wir es bis auf Argumente machen müssen,
ist, weil das erste Argument tatsächlich der Prince Stream ist. Wir werden es dagegen berufen. Und der Grund, warum wir den Prince Stream übergeben müssen, ist, dass wir, wenn wir diese
Methodenreferenz hier erstellt haben, nicht gesagt haben, gegen welche Instanz es gehen wird. Daher ist der Typ dieser Instanzmethodenreferenz in diesem Fall nicht gebunden. Instanz-Methodenreferenz wie obige Schaltfläche ungebundene Instanz. Methodenreferenz. Das bedeutet also, dass, wenn wir eine Funktion aufrufen grüßt, außer wir haben jetzt zwei Argumente. Sie werden sehen, wo wir als erstes Argument liefern müssen. Der Prinz-Traum, den es gegen mich aufgerufen wird, schaue ich nur Referenzsystem heraus ist , dass es öffentlich ist und es statisch ist, also ist es für uns zugänglich. Es ist außerhalb der Systemklasse auf einer anderen Zeichenfolge verfügbar. Ich werde die Instanzmethodenreferenz auf diesem hier binden, nur um es klar zu machen, wissen
Sie, aus dem Überfluss, Methodenreferenz und dass wir unsere kontrollieren, um zu laufen. Wir können sehen, dass es richtig involviert ist. Es sagt, dass ich eine ungebundene Instanzmethodenreferenz bin. Das war's also. Schön und einfach. Wie Sie sehen können, der Unterschied zwischen gebundenen und ungebundenen Methodenreferenzen nicht so schwer zu verstehen. Sobald Sie gerade erkannt haben, dass die gebundene Methodenreferenz einen impliziten Parameter annimmt, dem es sowieso die Instanz ist, auf die sie aufgerufen wird, also sollte Ihnen ein gutes Verständnis von Instanzmethodenreferenzen geben, die Sie jetzt verwenden können in Ihrem Job. Acht. Schneiden.
29. 29 Programmierung: Jetzt sind wir mit Instanzmethodenreferenzen vertraut, die wir im letzten Video gesehen haben. Lassen Sie uns unsere Aufmerksamkeit auf seine statischen Methodenreferenzen richten. Um also eine statische Methodenreferenz zu erstellen, lassen Sie uns über einige statische Methoden nachdenken, die uns wahrscheinlich ziemlich vertraut sind. Thread dunkle aktuelle Bedrohung. Okay, das gibt im Grunde den aktuellen Thread zurück, der in Betrieb ist. Dies ist also eine statische Methode für die Thread-Klasse, und so sollten wir in der Lage sein, eine statische Methodenreferenz daraus zu konstruieren, und wir können einfach Punkt durch eine doppelte Spalte ersetzen, die Theme-Klammern entfernt. Aber wieder, es ist keine Aussage. Wir werden es sehen. Also müssen wir zuweisen. Es war, bevor wir einem Verbraucher geben, der einen oder mehrere Parameter akzeptiert. Die entsprechende Funktionsschnittstelle dafür ist ein Lieferant, der einen
Wert zurückgeben wird , anstatt Werte zu akzeptieren. Es ist also eine Antwort vom Lieferanten aus Thread halten, um das zu importieren. Jetzt wissen wir, dass es ein Lieferant von Thread ist, denn wenn wir Befehl und den Mauszeiger über diese Methode, so dass es in einen Hyperlink verwandelt, können
wir die schnellen Informationen hier sehen. Es sagt, dass die aktuelle Bedrohung ein Thread-Objekt zurückgibt, und wieder könnte ich es aufrufen, damit wir Mazel ausgedruckt haben, damit wir sehen können, was der Wert ist. Also sagt aus Drucklinie, Fred Funktion nicht bekommen und sie sollten uns schnell geben Wir sind auf was zuzugreifen? Die aktuelle Freddies Kontrolle Ich jetzt sollte ich sagen, die Männer Thread Sie hier sehen können, es hat
uns einen Hinweis auf die Hauptbedrohung gegeben . Also, das ist eine statische Met die Referenz. Leg die einfach rein, um es irgendwie explizit zu machen, was wir hier tun. Dies war eine gebundene Instanzmethodenreferenz. Diese Waas Unbalances erfüllten die Referenz, beginnend mit der Referenz. Also, deshalb werden wir Explosion haben, ist eine Constrictor Methodenreferenz und wir werden sehen er bei den Referenzen in Aktion im nächsten Video
konstruiert wird.
30. 30 Coding mit den Nachweisen von Constructor: in diesem Video werden
wir uns konstruktive Methodenreferenzen ansehen, also lasst uns von dort abholen, wo wir vorher aufgehört haben. Aber wir suchen nach ekstatischen Referenzen. Für das erneute Erstellen von Methodenreferenzen ist
dies ein Lieferant, da wir eine Instanz von der Klasse zurückgeben und ein neues
Objekt zurückgeben . Es ist also wirklich ein Weg, um eine Factory-Methode zu deklarieren. Wenn Sie Instanzen der Klasse herstellen möchten und dafür, müssen
wir nur einen Verweis auf den neuen Schlüssel geben würde nach der doppelten Ruhe. Und dabei könnte der eigentliche Standardkonstruktor der eigentliche Standardkonstruktor
oder anstatt kein Argumentkonstruktor in dieser Methodenreferenz eingekapselt werden. Zum Beispiel könnten
wir einen Lieferanten haben,
Calenda,
und ich sah ihn,der über die Referenz konstruiert, um einen neuen gregorianischen Kalender zu erstellen. Zum Beispiel könnten
wir einen Lieferanten haben, Calenda, und ich sah ihn, Also, wenn ich Folk bin, die Sie hier sehen können, ist
es die Rückkehr der Gregorianischen Kalender in Bezug auf seinen Kalender Super-Typ. Das ist der Schnittstellentyp Aufzeichnungskalender erweitert. Also tue ich, um dorthin zu kommen, zähle. Nein, wenn ich renne, wenn ich auch gedruckt. Nein, nein. Wenn ich renne, können
Sie hier sehen. Wir haben eine Instanz eines koreanischen Kalenders zurück, also beachten Sie auch hier. Und das ist der Grund, warum wir dieses Beispiel gewählt haben, dass, wenn Sie die
Methodenreferenz verwenden , wir sie auch einer Funktionsschnittstelle eines kompatiblen Typs auf der Kompatibilität zuweisen können. Hier ist die Tatsache, dass Gregorianische Kalender erweitert Kalender, so dass, wenn wir in Gregorianischen Kalender schauen, können
wir sehen, es erweitert Kalender hier, so dass sollte eine schöne Einführung in Methodenreferenzen sein, und Sie sollten in der Lage, sie jetzt in Ihren eigenen Anwendungen zu verwenden.
31. 31 gut gemacht und Dank: Nun, das ist das Ende des Kurses auf Ich möchte nur sagen, wie gut sie verwendet, um es bis zum Ende zu schaffen . Es gibt viele knifflige Konzepte in Javari, wie Sie gesehen haben, aber durch Ausdauer und harte Arbeit haben Sie dort am Ende, Gut gemacht. Das ist wirklich tolles Zeug, wenn man stolz sein sollte, weißt
du, in der Lage zu sein, es weiter zu nehmen und tiefer mit dem Wissen zu vertiefen, das du hast . Also viel Spaß dabei. Und vergiss nicht, du kannst mich immer von allen Fragen erreichen. Alles, was bleibt Essays. Viel Spaß mit allem. Genießen Sie die Anwendung eines neu gewonnenen Wissens und haben Sie einen tollen Tag vor sich.