Beherrschen Sie die Verwendung von Lambda, Stream und LocalDate, damit Sie es regelmäßig verwenden können!
Lambda
Lambda ist eine Methode zum Definieren und Verwenden von Methoden als Variablen. Mit Lambda können Sie weniger Codezeilen schreiben. Sie können die definierte Methode auch als Argument an eine andere Methode übergeben. Schreiben Sie Methoden in Lambda, die nur wenige Male verwendet werden und von anderen Klassen nicht referenziert werden!
Da Lambda alle zu überschreibenden Funktionsnamen weglässt, muss die Schnittstelle geerbt werden, in der nur eine Methode definiert ist. Java bietet bereits funktionale Schnittstellen, die entsprechend der Anzahl der Argumente und Rückgabewerte verwendet werden können. Wir werden sie daher verwenden.
** * Achtung: Wenn Sie primitive Typen wie int und double für Argumente und Rückgabewerte verwenden, verwenden Sie die entsprechenden Schnittstellen! (Weil es einen Leistungsunterschied gibt) ** Beispiel) // Wenn Sie int senden und int empfangen möchten Function → IntUnaryOperator
Die detaillierten Arten von Schnittstellen sind unten aufgeführt. http://www.ne.jp/asahi/hishidama/home/tech/java/functionalinterface.html#h_Function
Es ist als Argumenttyp und Rückgabetyp definiert.
Die Ausführung verwendet die Methode apply ().
Es gibt auch eine BiFunktion, die zwei Argumente akzeptieren kann.
Wenn Sie den int-Typ für das Argument und den Rückgabewert angeben möchten, verwenden Sie "IntUnaryOperator" anstelle von "Function".
Die Ausführungsmethode lautet applyAsInt ()
.
import java.util.function.*;
//In der Hauptsache
Function<String, String> f = (i) -> { return i +"OK"; };
System.out.println(f.apply("test")); // testOK
Gibt den Typ des Arguments an.
Die Ausführung verwendet die Methode accept ()
.
Wenn Sie das Argument als int-Typ angeben möchten, verwenden Sie "IntConsumer".
import java.util.function.*;
//In der Hauptsache
Consumer<String> c = i -> { System.out.println(i); };
c.accept("testOK"); // testOK
Gibt den Rückgabetyp an. Die Ausführung verwendet die Methode get (). Wenn Sie den Rückgabewert als int-Typ angeben möchten, verwenden Sie "IntSupplier". Die Ausführungsmethode ist "getAsInt ()".
import java.util.function.*;
//In der Hauptsache
Supplier<String> s = () -> { return "testOK"; };
System.out.println(s.get()); // testOK
Die Ausführung verwendet die Methode test ()
.
Der Unterschied zwischen der Booleschen Spezifikation von Function und Predicate besteht darin, dass Function Boolean zurückgibt, während Predicate Boolean zurückgibt, einen primitiven Typ.
Wenn Sie das Argument als int-Typ angeben möchten, verwenden Sie "IntPredicate".
import java.util.function.*;
//In der Hauptsache
Predicate<String> p = (i) -> { return i.equals("AAA"); };
System.out.println(p.test("AAA")); // true
Stream
Sie können einen Listentyp für Anweisungen usw. präzise schreiben. Sie können Lambda auch als Methodenargument verwenden. Importieren Sie bei Verwendung "java.util.stream".
Betrachten Sie zunächst eine normale for-Anweisung.
for(int i; i < 10; i++){
System.out.println(i+"Dies ist das zweite Mal");
}
Wenn Sie dies in Stream schreiben
IntStream.range(0, 10).forEach(i -> System.out.println(i+"Dies ist das zweite Mal"));
Es wird einfach sein.
Wenn Sie sich für die Elemente von ArrayList entscheiden möchten,
//Für die Variablenliste
list.stream().forEach(i -> [wird bearbeitet])
Sie können so schreiben.
Der Stream verfügt über eine Zwischenoperationsmethode, die jedes Element konvertiert, und eine Terminaloperationsmethode, die den Wert schließlich zurückgibt oder speichert. Bitte beachten Sie, dass die konvertierten Elemente erst gespeichert werden, wenn der Beendigungsvorgang ausgeführt wird.
Die Zwischenoperationen sind wie folgt.
.skip (n)
... Verwerfe die ersten n Elemente.
.limit (n)
... Extrahiere nur die ersten n Elemente.
.filter (i-> [Bedingung])
... Extrahieren Sie diejenige, die die Bedingung erfüllt.
.distinct ()
... Duplikate entfernen.
.sorted ()
... In natürlicher Reihenfolge sortieren. Es ist auch möglich, eine Sortierregel in Klammern anzugeben.
.map (i-> [Verarbeitung])
... Alle Elemente verarbeiten.
Die Beendigungsoperationen sind wie folgt.
.forEach (i-> [Processing])
... Ausgabe.
.findFirst ()
... Gibt das erste Element zurück.
.collect ()
... Erstelle das Ergebnis. (Die Verarbeitung ändert sich je nach Argument.)
.count ()
... Gibt die Anzahl der Elemente zurück.
.allMach ([Bedingung]) .anyMach ([Bedingung]) .noneMach ([Bedingung])
... Bestimmen Sie, ob eine Übereinstimmung vorliegt.
LocalDate
Eine Klasse, die Daten verarbeitet.
Es ist einfacher zu handhaben als die Kalenderklasse, die ich verwendet habe.
Importieren und verwenden Sie java.time.LocalDate
.
Wir werden die Operationen, die im Folgenden häufig verwendet werden, ansprechen.
LocalDate date = LocalDate.now();
Stellen Sie 2020-01-01 ein
localDate date = LocalDate.of(2020, 1, 1);
Im Gegensatz zum Kalender müssen Sie nicht -1 Monat!
Importieren Sie java.time.format.DateTimeFormatter.
date = LocalDate.parse("20200101",DateTimeFormater.ofPattern("yyyyMMdd"));
Auch unten möglich
date = LocalDate.parse("2020-01-01");
Jahr
date.getYear();
Mond
date.getMonth();
Tag
date.getDayOfMonth();
Tag
date.getDayOfWeek();
+10 Tage
date.plusDays(10);
-Der 10 ..
date.miusDays(10);
+2 Jahre
date.plusYears(2);
Importieren Sie java.time.temporal.ChronoUnit.
Datumsunterschied
long diff = ChronoUnit.DAYS.between(date1, date2);
Lambda http://www.ne.jp/asahi/hishidama/home/tech/java/functionalinterface.html#h_Function https://qiita.com/sano1202/items/64593e8e981e8d6439d3
Stream http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html https://qiita.com/kumazo/items/0876c5b251ecc131c960 https://qiita.com/kumazo/items/104fa685da8705b8cfd8 https://qiita.com/kumazo/items/284098c530fceb05805c
LocalDate https://blog.y-yuki.net/entry/2016/09/15/003000) https://m-shige1979.hatenablog.com/entry/2017/03/10/080000