[Inhouse-Lernsitzung] Java-Grundlagen - Lambda-Ausdruck und Stream-API - (13.07.2017)

0. Einleitung


Was ich erzählen möchte

Vorausgesetztes Wissen


Nachschlagewerke

Java本格入門.jpg ["Einführung in Java

Sofern nicht anders angegeben, wird dieses Buch zitiert.


Inhaltsverzeichnis


1. Lambda-Typ


Was ist ein Lambda-Ausdruck?

Lambda-Ausdrücke sind leistungsstarke Notationen, als könnten Sie den Prozess selbst an ein Methodenargument usw. übergeben.

List<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 3, 2, 1, 4, 5);

//Schreiben ohne Lambda-Ausdruck (anonyme Klasse)
Collections.sort(list, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1, Integer o2) {
		return Integer.compare(o1, o2);
	}
});

//Wie schreibe ich mit Lambda-Ausdruck
Collections.sort(list,
		(o1, o2) -> Integer.compare(o1, o2)
);

Der Lambda-Ausdruck ist nur "einfach, eine Implementierungsmethode einer anonymen Klasse zu schreiben", aber in Kombination mit der später beschriebenen Stream-API kann er auf leicht verständliche Weise geschrieben werden.


[Ergänzung] Anonyme Klasse

Wird häufig in den Einstellungen des Ereignis-Listeners verwendet.

//So schreiben Sie beim Festlegen eines Klickereignisses unter Android
findViewById(R.id.hogehoge).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Verarbeitung zum Zeitpunkt des Klickens
    }
});

Verwendung als Alternative zu funktionalen Schnittstellen


Grundlegende Grammatik des Lambda-Ausdrucks

//Grundlegende Grammatik des Lambda-Ausdrucks
Collections.sort(list,
		(Integer o1, Integer o2) -> {
           return Integer.compare(o1, o2);
        }
);

//Argumenttyp weglassen
Collections.sort(list,
		(o1, o2) -> {
           return Integer.compare(o1, o2);
        }
);

//Argumenttyp, Rückgabe und gewellte Klammern wurden weggelassen
Collections.sort(list,
		(o1, o2) -> Integer.compare(o1, o2)
);

Methodenreferenz

Die Methode selbst kann ebenfalls zugewiesen werden.

List<String> list = Arrays.asList("X", "Y", "Z");
//Schreiben mit Methodenreferenzen
list.forEach(System.out::println);

//Wie schreibe ich mit Lambda-Ausdruck
list.forEach(str -> System.out.println(str));

Das Argument der Methode "forEach" ist eine Funktionstypschnittstelle mit dem Namen "java.util.function.Consumer".


2.Stream API


Was ist die Stream-API?

Die Stream-API wurde eingeführt, um die "Stream-Verarbeitung", bei der große Datenmengen nacheinander verarbeitet werden, effizient zu beschreiben.

List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);

list.stream() //Stream-Instanziierung
    .filter(s -> s>=70) //Zwischenbetrieb.//Extrakt über 70.
    .forEach(s -> System.out.println(s)); //Kündigungsoperation.

TODO-Stream-Bild anzeigen


API-Funktionen streamen

Die Stream-API ist "API, die Was und nicht Wie beschreibt".


Stream-API-Klassifizierung

Stream-API-Liste


API zum Erstellen eines Streams

//Stream aus Liste oder Set erstellen
List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);
list.stream() //Stream-Instanziierung
    .forEach(System.out::println);
    

//Erstellen Sie einen Stream aus einem numerischen Bereich
IntStream.range(1, 5) //Beinhaltet nicht das Ende
    .forEach(System.out::println);

IntStream.rangeClosed(1, 5) //Einschließlich des Endes
    .forEach(System.out::println);


Zwischenoperationen auf Stream

List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);

//map:Ersetzen Sie das Element durch einen anderen Wert
list.stream()
    .map(s -> s * s)
    .forEach(System.out::println);
    
//filter:Grenzen Sie nur die Elemente ein, die den Bedingungen entsprechen
list.stream()
    .filter(s -> s>=7)
    .forEach(System.out::println);

//sort:
list.stream()
    .sorted((s1,s2) -> s2 - s1) //absteigende Reihenfolge
    .forEach(System.out::println);


Beendigungsoperation für Stream

List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);

//forEach:Ergreifen Sie Maßnahmen für ein Element
list.stream()
    .forEach(System.out::println);
    
//collect:Ergebnisse erstellen
List<Integer> newList = list.stream()
    .filter(s -> s>=7)
    .collect(Collectors.toList());

//average:Gibt den Durchschnitt zurück(Aggregationsoperation)
list.stream()
    .average();


Funktionale Sprache

JavaScript auch. .. ..

Recommended Posts

[Inhouse-Lernsitzung] Java-Grundlagen - Lambda-Ausdruck und Stream-API - (13.07.2017)
[Inhouse-Studiensitzung] Behandlung von Java-Ausnahmen (26.04.2017)
Zusammenfassung der internen Rookie-Lernsitzung [Java]
Heutzutage Java Lambda Expressions und Stream API
Java Stream API
[Java] Stream API / Map
[Inhouse-Studiensitzung] Grundlagen der Java-Annotation (02.11.2017) ~ Im Aufbau ~
Studiere Java # 2 (\ mark and operator)
Java Stream API Spickzettel
Java Stream API in 5 Minuten
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
[Java] Stream API - Stream-Beendigungsverarbeitung
[Java] Stream API - Stream Zwischenverarbeitung
[Java] Einführung in die Stream-API
[Java] Stream API Zwischenoperation
Behandeln Sie Ausnahmen kühl mit Java 8-Lambda-Ausdrücken und der Stream-API
[Milight Design Inhouse Study Group # 5] Lesen Sie docker-compose.yml und Dockerfile Zeile für Zeile
[Memo zur Studiensitzung] Java Day Tokyo 2017
Ich habe versucht, die Java8 Stream API zu verwenden
Studieren Sie Java # 5 (Wiederholung und Endlosschleife)
Java 8 ~ Stream API ~ startet jetzt
Java8 / 9-Anfänger: Streamen Sie API-Suchtpunkte und wie Sie damit umgehen
Nehmen Sie an einer unterhaltsamen Programmier-Lernsitzung teil!
Datenverarbeitung mit der Stream-API von Java 8
Versuchen Sie es mit der Stream-API in Java
Java-Studie Nr. 3 (Typkonvertierung und Befehlsausführung)
[Inhouse-Lernsitzung] Einführung von "Readable Code"
Probieren Sie verschiedene Java Stream API-Methoden aus (jetzt)
Hinweise zur Stream-API und zu SQL von Java
Ich habe Javas Lambda-Ausdruck Stream-API ein halbes Jahr nach dem Start von Java überprüft.
Erstellen Sie eine API mit Retrofit2, Okhttp3 und Gson (Java).
Java switch Anweisung und break, Kotlin beim Ausdruck ...
Memo zur Studiensitzung: Kansai Java Engineers Association 8/5 - Selenium
Verwendung der Java-API mit Lambda-Ausdrücken
Wie man Java SE8 Gold bekommt und studiert
Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~
[Für Anfänger] Über Lambda-Ausdrücke und Stream-API
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -