Analyse des Quellcodes des Lambda-Ausdrucks auf Java8-Nanny-Ebene
1. Ersetzen anonymer innerer Klassen
Es besteht kein Zweifel, dass der am häufigsten verwendete Anlass für Lambda-Ausdrücke darin besteht, anonyme innere Klassen zu ersetzen, und die Implementierung der Runnable-Schnittstelle ist ein klassisches Beispiel für anonyme innere Klassen. Lambda-Ausdrücke sind ziemlich mächtig. Sie können ()-> verwenden, um die gesamte anonyme innere Klasse zu ersetzen! Bitte schauen Sie sich den Code an:
Bei Verwendung einer anonymen inneren Klasse:
@Test public void oldRunable() { new Thread(new Runnable() { @Override public void run() { System.out.println("The old runable now is using!"); } }).start(); }
Und bei Verwendung eines Lambda-Ausdrucks:
@Test public void runable() { new Thread(() -> System.out.println("It's a lambda function!")).start(); }
Die endgültige Ausgabe:
Das alte Runable verwendet jetzt!
Es ist eine Lambda-Funktion!
Ja, ist es nicht erschreckend mächtig? Ist es erschreckend einfach? Ist es erschreckend klar und fokussiert? Das ist das Beängstigende an Lambda-Ausdrücken: Es wird nur sehr wenig Code benötigt, um das zu erreichen, was die vorherige Klasse getan hat!
2. Verwenden Sie Lambda-Ausdrücke, um Sammlungen zu durchlaufen.
Java-Sammlungsklassen werden häufig in der täglichen Entwicklung verwendet, und es wird sogar gesagt, dass es keinen Java-Code gibt, der keine Sammlungsklassen verwendet. . . Die häufigste Operation für Sammlungsklassen ist das iterative Durchlaufen. Bitte sehen Sie sich den Vergleich an:
@Test public void iterTest() { List<String> languages = Arrays.asList("java","scala","python"); //before java8 for(String each:languages) { System.out.println(each); } //after java8 languages.forEach(x -> System.out.println(x)); languages.forEach(System.out::println); }
Wenn Sie mit Scala vertraut sind, müssen Sie mit forEach vertraut sein. Es durchläuft alle Objekte in der Sammlung und fügt ihnen Lambda-Ausdrücke hinzu.
languages.forEach(System.out::println);
Diese Zeile ähnelt ein wenig der Art und Weise, wie die Bereichsauflösung in C++ geschrieben wird, und sie ist auch hier möglich.
3. Verwenden Sie Lambda-Ausdrücke, um Map zu implementieren.
Wie können wir Map nicht erwähnen, wenn es um funktionale Programmierung und Lambda-Ausdrücke geht? . . Ja, Java8 wird definitiv unterstützt. Bitte schauen Sie sich den Beispielcode an:
@Test public void mapTest() { List<Double> cost = Arrays.asList(10.0, 20.0,30.0); cost.stream().map(x -> x + x*0.05).forEach(x -> System.out.println(x)); }
Das endgültige Ausgabeergebnis:
10.5
21.0
31.5
Die Kartenfunktion kann als die wichtigste Methode in der funktionalen Programmierung bezeichnet werden. Die Funktion einer Karte besteht darin, ein Objekt in ein anderes umzuwandeln. In unserem Beispiel werden die Kosten durch die Kartenmethode um das 0,05-fache erhöht und dann ausgegeben.
4. Verwenden Sie Lambda-Ausdrücke, um Map und Reduce zu implementieren.
Da Map erwähnt wird, wie können wir Reduce nicht erwähnen? Wie Map ist auch Reduce eine der wichtigsten Methoden in der funktionalen Programmierung. . . Die Funktion von Map besteht darin, ein Objekt in ein anderes umzuwandeln, während die Funktion von Reduce darin besteht, alle Werte zu einem zusammenzuführen. Bitte sehen Sie:
@Test public void mapReduceTest() { List<Double> cost = Arrays.asList(10.0, 20.0,30.0); double allCost = cost.stream().map(x -> x+x*0.05).reduce((sum,x) -> sum + x).get(); System.out.println(allCost); }
Das Endergebnis ist:
63,0
Wenn wir ein for verwenden Schleife, um es zu tun Diese Angelegenheit:
@Test public void sumTest() { List<Double> cost = Arrays.asList(10.0, 20.0,30.0); double sum = 0; for(double each:cost) { each += each * 0.05; sum += each; } System.out.println(sum); }
Ich glaube, dass die Schreibweise von „map+reduce+lambda expression“ mehr als eine Ebene höher ist.
5.Filteroperation
Filter ist auch eine Operation, die wir häufig verwenden. Beim Betrieb einer Sammlung ist es häufig erforderlich, einige Elemente aus der ursprünglichen Sammlung herauszufiltern.
@Test public void filterTest() { List<Double> cost = Arrays.asList(10.0, 20.0,30.0,40.0); List<Double> filteredCost = cost.stream().filter(x -> x > 25.0).collect(Collectors.toList()); filteredCost.forEach(x -> System.out.println(x)); }
Das Endergebnis:
Haben Sie Lust, Java in Python oder Scala zu schreiben? Ist er nicht so hübsch? 6. Zusammenarbeit mit der funktionalen Schnittstelle PredicateZusätzlich zur Unterstützung des funktionalen Programmierstils auf Sprachebene fügte Java 8 auch ein Paket namens java.util.function hinzu. Es enthält viele Klassen zur Unterstützung der funktionalen Programmierung in Java. Eine davon ist Predicate. Mit der Funktionsschnittstelle java.util.function.Predicate und Lambda-Ausdrücken können Sie API-Methoden Logik hinzufügen und dynamischeres Verhalten mit weniger Code unterstützen. Die Predicate-Schnittstelle eignet sich sehr gut zum Filtern.
30.0
30.0
40.0
40.0
public static void filterTest(List<String> languages, Predicate<String> condition) { languages.stream().filter(x -> condition.test(x)).forEach(x -> System.out.println(x + " ")); } public static void main(String[] args) { List<String> languages = Arrays.asList("Java","Python","scala","Shell","R"); System.out.println("Language starts with J: "); filterTest(languages,x -> x.startsWith("J")); System.out.println("\nLanguage ends with a: "); filterTest(languages,x -> x.endsWith("a")); System.out.println("\nAll languages: "); filterTest(languages,x -> true); System.out.println("\nNo languages: "); filterTest(languages,x -> false); System.out.println("\nLanguage length bigger three: "); filterTest(languages,x -> x.length() > 4); }
Wie Sie sehen können, akzeptiert die Filtermethode der Stream-API auch ein Prädikat, was bedeutet, dass unsere benutzerdefinierte filter()-Methode durch den darin geschriebenen Inline-Code ersetzt werden kann , das ist auch die Magie von Lambda-Ausdrücken. 🎜Java
Sprache beginnt mit J:scala
Sprache endet mit a:
JavaR
Alle Sprachen:
Java
Python
scala
ShellKeine Sprachen:
Shell
Sprachlänge größer drei:
Python
scala
Das obige ist der detaillierte Inhalt vonAnalyse des Quellcodes des Lambda-Ausdrucks auf Java8-Nanny-Ebene. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist
