[JAVA] Bis zur Programmierung können Anfänger Lambda-Ausdrücke verwenden

Hinweise dazu, wie neue SIer Java 8-Lambda-Ausdrücke verwenden können (nicht sagen) Hier ist eine Liste der Dinge, die schief gelaufen sind, bevor Sie damit begonnen haben. Grob gesagt fand ich es dank Stream einfach zu bedienen.

Lambda-Stil? Keine Ahnung!

Lambda-Ausdrücke sind eine Funktion, die seit Java 8 hinzugefügt wurde Sie werden es oft zusammen mit funktionaler Programmierung und Stream hören.

Kurz nachdem ich die if- und for-Anweisungen verstanden hatte, erfuhr ich von der Existenz von Lambda-Ausdrücken und der funktionalen Programmierung.

Der offene Eindruck zu dieser Zeit ** "Was ist das, ich habe keine Ahnung." **

Warum verstehst du die Lambda-Formel nicht?

In meinem Fall 3 Punkte

** 1. Ich verstehe die Bedeutung des Wortes Lambda-Ausdruck nicht ** ** 2. Ich verstehe die Vorteile des Lambda-Ausdrucks nicht ** ** 3. Ich weiß nicht, wie man einen Lambda-Ausdruck schreibt **

Wurde erwähnt.

Ich verstehe die Bedeutung des Wortes nicht

Das Wort Lambda sollte dem Durchschnittsmenschen nicht bekannt sein. Wenn Sie nach einem Lambda-Ausdruck suchen, wird das japanische Wiki dies tun

Lambda-Ausdrücke sind eng mit Lambda-Berechnungen verwandt und besonders in funktionalen Sprachen beliebt.

Ist geschrieben. Nein, was ist Lambda-Berechnung?

Ich verstehe die Vorteile nicht

HelloWorldLambda.java


public class Main {
	public static void main(String[] args) {
		Runnable r = () -> System.out.println("Hello World");
		r.run(); // Hello World
	}
}

Dies ist ein Beispiel für eine gemeinsame Hello World.

Ich zu dieser Zeit "Normalerweise System.out.println (" Hallo Welt "); Ist es nicht nur eine Frage des Tuns ...?" Ich dachte.

Korrekt. Dieses Beispiel ** soll Lambda-Ausdrücke verwenden **. Jetzt wissen Sie nicht, welche Vorteile die Verwendung von Lambda-Ausdrücken hat.

Ich kann nicht schreiben

ExLambda.java


Runnable r = () -> System.out.println("Hello World");

Lambda-Ausdrücke werden mit der Syntax (formales Argument) -> {process} beschrieben. Es gibt viele Teile, die im Lambda-Ausdruck weggelassen werden können, was auch für Anfänger ein Grund ist, nicht zu verstehen.

Das Problem ist, dass ich noch nie in Java gesehen habe, dass ich bisher gelernt habe. Darüber hinaus ist der Inhalt von () leer, obwohl es sich im obigen Beispiel um ein formales Argument handelt.

Wohin sind diese Jungs gegangen? Was um alles in der Welt ersetzt dies ** r? ** ** **

Wie hast du es denn verstanden?

Ich habe versucht, Stream zu verwenden

Lambda-Ausdrücke sind eine Funktion, die in Java 8 hinzugefügt wurde. Gleichzeitig wurde eine Funktion namens ** Stream API ** hinzugefügt.

Dies ist genau die Funktion, um den Lambda-Ausdruck zu verwenden. Vielmehr soll die Verwendung der Stream-API vereinfacht werden Es ist keine Übertreibung zu sagen, dass der Lambda-Ausdruck implementiert wurde. (Ich denke, es beinhaltet verschiedene Faktoren wie die Stärkung der Typinferenz)

Dies gab mir ein Bild davon, wie man den Lambda-Stil verwendet.

Verwenden Sie .forEach ()

Ich werde es mit einem kurzen Beispiel erklären.

ExIterable.java


public class ExIterable {
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>();

		list.add("Apple");
		list.add("Banana");
		list.add("Cherry");

		list.forEach(s -> System.out.println(s));
		// Apple
		// Banana
		// Cherry
	}
}

In diesem Beispiel wird der Inhalt der Liste mit Apple, Banana und Cherry als Elementen ausgegeben. Hier wird der Lambda-Ausdruck verwendet

list.forEach(s -> System.out.println(s));

Das ist der Teil.

Ins Japanische übersetzt ** Packen Sie den Inhalt der Liste nacheinander in s und geben Sie den Inhalt der Liste nacheinander mit System.out.println (s) aus. ** ** ** Es bedeutet das.

Haben Sie jemals etwas Ähnliches gehört?

Das ist richtig ** Erweitert für Aussage **.

for (String s : list) {
	System.out.println(s);
}

Die obige erweiterte for-Anweisung ergibt das gleiche Ergebnis wie die oben verwendete Lambda-Anweisung.

Derzeit sind ** Lambda-Ausdrücke eine Alternative zu erweiterten Anweisungen! Ich konnte eine Verwendung von ** verstehen. Wenn Sie nur einen Ort kennen, an dem Sie ihn verwenden können, ist es von dort aus leichter zu verstehen.

Dies allein zeigt jedoch nicht die Vorteile der Verwendung der Lambda-Formel. Erweitert für Aussage ist in Ordnung! Es wird werden.

Verwenden Sie .mapToInt ()

Lassen Sie uns nun die Summe der Zahlen anhand einer Liste mit ["1", "2", "3"] als Elementen anzeigen. Da es in Form eines Strings gespeichert ist, muss es in int usw. analysiert werden.

ExForEachSum.java


public class ExForEachSum {
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>();

		list.add("1");
		list.add("2");
		list.add("3");

		System.out.println(list); // [1, 2, 3]

		int sum = 0;

		for (String s : list) {
			sum += Integer.parseInt(s);
		}

		System.out.println(sum); // 6

	}
}

Vor der for-Anweisung müssen Variablen vorbereitet werden, z. B. int sum = 0. Es dauert länger als nur die Ausgabe wie zuvor, z. B. die Notwendigkeit, die for-Anweisung hinzuzufügen.

Schreiben wir dies mit Stream und einem Lambda-Ausdruck.

ExStreamSum.java


public class ExStreamSum {
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>();

		list.add("1");
		list.add("2");
		list.add("3");

		System.out.println(list); // [1, 2, 3]

		int sum = list.stream() //Liste in Stream konvertieren
				.mapToInt(s -> Integer.parseInt(s)) //Konvertieren Sie den Stream in IntStream
				.sum(); //Summiere die in int konvertierten Elemente

		System.out.println(sum); // 6

	}
}

Hier ist mapToInt eine Methode, die das empfangene Element in int und Stream in IntStream konvertiert. Und Sie müssen in diesem Argument festlegen, wie das Element in int konvertiert werden soll. Wie Sie vielleicht bereits wissen, Die hier beschriebenen s-> Integer.parseInt (s) sind Lambda-Ausdrücke, die zeigen, wie ein Element transformiert wird. Die als formales Argument empfangenen Zeichenfolgen werden mit Integer.parseInt analysiert.

Sie können es in int konvertieren und das Element übergeben. Versuchen Sie also, es wie unten gezeigt zu verdreifachen

int sum = list.stream()
		.mapToInt(s -> {
			int num = Integer.parseInt(s);
			return num * 3;
		}) 
		.sum();
System.out.println(sum); // 18

Sie können den Inhalt des Elements vorerst auch auf 100 drücken.

int sum = list.stream()
		.mapToInt(s -> {
			return 100; //Ich werde dir vorerst 100 geben
		}) 
		.sum();
System.out.println(sum); // 300

Ich werde die Details weglassen, aber Außerdem können Sie mit sortiert und Komparator sortieren, Sie können Filter zum Filtern verwenden Durch das Lernen durch Stream habe ich gelernt, wie man den Lambda-Ausdruck verwendet.

Informationen zur Stream-API Einführung in die Java Stream API Usw. werden als detailliert angesehen.

Dies ist mit Lambda-Ausdrücken dank der ** Funktionsschnittstelle ** möglich. Wenn Sie interessiert sind, lesen Sie bitte den folgenden Artikel über Qiita. Was ist eine funktionale Schnittstelle? (Java)

Anstatt ein Objekt zu schreiben, das eine funktionale Schnittstelle implementiert, können Sie einen Lambda-Ausdruck schreiben. Wenn Sie das wissen, können Sie es schaffen.

Ich habe es geschafft, es ein wenig zu benutzen

Ich habe zum ersten Mal einen Qiita-Artikel als Memorandum geschrieben.

** Lokale Variablen werden als endgültig erkannt. ** Leiden unter Lambda-Spezifikationen. ** Ausnahmebehandlung in Lambda kann nicht von außen gefangen werden ** (natürlich aufgrund der Lambda-Spezifikationen) Es gibt einige Punkte, um stecken zu bleiben, Die ** Zerstörungskraft ** im Lambda-Stil ist hervorragend, wenn sie in Kombination mit der Stream-API verwendet wird. (Extrem können Sie es schreiben, auch wenn Sie sich nicht an den Namen und die Methode der Funktionsschnittstelle erinnern.)

Sie können die Grundidee auch lernen, wenn Sie anonyme Funktionen und Lambdas in anderen Sprachen verwenden Wir hoffen, dass diejenigen, die diesen Artikel lesen, auch versuchen werden, den Lambda-Stil zu verwenden.

Schließlich bleibt nichts anderes übrig, als Dinge zu verwenden und sich daran zu erinnern, die Sie nicht verstehen.

Recommended Posts

Bis zur Programmierung können Anfänger Lambda-Ausdrücke verwenden
Verwendung von Java-Lambda-Ausdrücken
[Für Anfänger] Über Lambda-Ausdrücke und Stream-API
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
"Vererbung", die auch Anfänger der Objektorientierung verstehen können
Polymorphismus, den auch Anfänger der Objektorientierung verstehen können
Verstehen Sie Java 8 Lambda-Ausdrücke
Über Java-Lambda-Ausdrücke
Erläutern Sie Java 8-Lambda-Ausdrücke
Viel Spaß beim Programmieren mit Lambda-Stil und flüssiger Oberfläche