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. ~~
~~ Verwenden Sie in Java8 die `while-Anweisung
! !! ~~
Immerhin macht es Spaß, "StreamAPI" zu verwenden! !!
Ü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?