Inhaltsverzeichnis
1. Ersetzen anonymer innerer Klassen
2. Verwenden Sie Lambda-Ausdrücke, um Sammlungen zu durchlaufen.
3. Verwenden Sie Lambda-Ausdrücke, um Map zu implementieren.
4. Verwenden Sie Lambda-Ausdrücke, um Map und Reduce zu implementieren.
5.Filteroperation
Heim Java javaLernprogramm Analyse des Quellcodes des Lambda-Ausdrucks auf Java8-Nanny-Ebene

Analyse des Quellcodes des Lambda-Ausdrucks auf Java8-Nanny-Ebene

Apr 14, 2023 pm 11:04 PM
java lambda

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();
    }
Nach dem Login kopieren

Und bei Verwendung eines Lambda-Ausdrucks:

    @Test
    public void runable() {
        new Thread(() -> System.out.println("It's a lambda function!")).start();
    }
Nach dem Login kopieren

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);
    }
Nach dem Login kopieren

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);
Nach dem Login kopieren

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));
    }
Nach dem Login kopieren

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);
    }
Nach dem Login kopieren

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);
    }
Nach dem Login kopieren

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

    }
Nach dem Login kopieren

Das Endergebnis:

30.030.0

40.0

40.0

Haben Sie Lust, Java in Python oder Scala zu schreiben? Ist er nicht so hübsch?

6. Zusammenarbeit mit der funktionalen Schnittstelle Predicate

Zusä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.

    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);
    }
Nach dem Login kopieren
Das endgültige Ausgabeergebnis:


Sprache beginnt mit J:

Java


Sprache endet mit a:
Java

scala


Alle Sprachen:
Java
Python
scala
Shell

R

Keine Sprachen:


Sprachlänge größer drei:
Python
scala

Shell

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. 🎜

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

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

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

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

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

See all articles