Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht

Wenn Sie beispielsweise das Datum ab einem bestimmten Startdatum (`` `startYmd```) um 5 Tage vorverlegen möchten und das Datum suchen möchten, an dem das Timing Today überschreitet.

LocalDate ymd; //Anfangsdatum

while (ymd.isBefore(LocalDate.now())) {
    ymd = ymd.plusDays(5);
}

System.out.println(ymd); //Der erste Tag nach Heute, 5 Tage ab dem Startdatum

Ich schreibe.

Irgendwie dachte ich kürzlich, dass ich "while-Anweisung" nicht schreiben sollte, also entschied ich mich, sie mit "StreamAPI" zu schreiben. Oh, es ist Java 8, nachdem man weiß, dass Java 9 "Stream # takeWhile" hat.

Also wurde dieser Code erstellt.

LocalDate startYmd; //Anfangsdatum

Stream.iterate(startYmd, ymd -> ymd.plusDays(5))
    .filter(ymd -> !ymd.isBefore(LocalDate.now()))
//    .sorted()← Endlosschleife damit! !!
    .findFirst()
    .ifPresent(ymd -> {
        System.out.println(ymd); //Der erste Tag nach Heute, 5 Tage ab dem Startdatum
    });

Es ist lange her, dass ich den Kommentar erhalten habe, aber ich habe ihn behoben. Es scheint, dass die zustandsbehaftete Zwischenoperation `sort ()` die Ursache für die Endlosschleife war, und zu dieser Zeit gab es viel Mangel an Studien ... (Übrigens war die Auswertung von `` filter () `auch das Gegenteil ... orz)

~~ Ja. Es ist eine Endlosschleife. ~~ ~~ Infinite Stream VS `Stream # filter `Ich war dumm, als ich den rücksichtslosen Kampf herausforderte. ~~

~~ Beim Versuch, eine Endlosschleife zu vermeiden ~~

LocalDate startYmd; //Anfangsdatum

Stream.iterate(startYmd, ymd -> ymd.plusDays(5))
    .limit(ChronoUnit.DAYS.between(startYmd, LocalDate.now())) // ÷5+1 ist in Ordnung...
    .filter(ymd -> ymd.isBefore(LocalDate.now()))
    .sorted()
    .findFirst()
    .ifPresent(ymd -> {
        System.out.println(ymd); //Der erste Tag nach Heute, 5 Tage ab dem Startdatum
    });

Es fühlt sich an wie ~~, was ist der ursprüngliche Zweck? Es wird ein Code sein. ~~

Fazit

~~ Verwenden Sie in Java8 die `while-Anweisung! !! ~~ Immerhin macht es Spaß, "StreamAPI" zu verwenden! !!

Serpentin

Übrigens gibt es eine Bibliothek, die "Stream # takeWhile" -ähnliches Verhalten realisiert, sodass Sie es verwenden oder eine "TakeWhile" -Klasse erstellen können, damit es sich ähnlich verhält, sodass Sie die Freiheit haben. Ist es in Ordnung, es in hoher Entwicklung zu versuchen?

Recommended Posts

Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
Ich habe versucht, ein Tool zum Vergleichen von Amazon-Produktpreisen auf der ganzen Welt mit Java, der Amazon Product Advertising API und der Currency API (29.01.2017) zu erstellen.
[java8] Um die Stream-API zu verstehen
[Java] Umgang mit der Situation, in der das Programm, das in den Output Stream of Process schreibt, nicht endet, selbst wenn waitFor
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
Eine Geschichte, die ich als Nicht-Ingenieur endlich verstanden habe
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
Ich habe versucht, die Stream-API zusammenzufassen
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
Immerhin wollte ich den Inhalt von MySQL mit Docker in der Vorschau anzeigen ...
[Kotlin] Ich wollte ein PNG mit einer großen Kapazität pro Bereich generieren [Java]
Ich habe versucht, 10 ausgewählte Fragen aus der Vergangenheit zu lösen, die nach der Registrierung bei AtCoder mit Java, Stream API, gelöst werden sollten
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich habe versucht, mit der Java Stream-API eine Methode zu erstellen, die mehrere Filter gleichzeitig anwendet. Ist das in Ordnung?
Als ich eine Methode für Premium Friday erstellen wollte, war sie bereits in der Java 8-Standard-API enthalten
[Kleine Geschichte] Ich habe versucht, die Java-ArrayList etwas komfortabler zu gestalten
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe einen Testcode (Junit & mockit) für den Code geschrieben, der die AWS-API (Java) aufruft.
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Implementieren wir eine Funktion, um die Anzahl der Zugriffe auf die API mit SpringBoot + Redis zu begrenzen
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Wie schreibe ich Scala aus der Perspektive von Java
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
Die Geschichte von dto, dao-like mit Java, SQLite
Java: Eine Geschichte, in der ich mich unwohl fühlte, als mir beigebracht wurde, Strings ohne Grund mit Gleichen zu vergleichen.
Ein problematischer Hinweis beim Versuch, nginx mit Remote-Containern von vscode zu verwenden
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Eine Geschichte, die mir klar wurde, dass ich überhaupt als Ingenieur studieren musste
Ich habe versucht, ein Programm in Java zu erstellen, das das Problem des Handlungsreisenden mit einem genetischen Algorithmus löst
Eine Geschichte, die mich während des Komponententests von der impliziten Typkonvertierung von ActiveRecord abhängig machte
[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Eine Geschichte, die von String () von Interface abhängig ist und von JdkDynamicAopProxy vertreten wird
Was ich mit der Redmine REST API süchtig gemacht habe