import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main
(String[] args
) { List
<LocalDate
> list
= Arrays.
asList( LocalDate.of(2021, 8, 1),
LocalDate.of(2021, 8, 2),
LocalDate.of(2021, 8, 3),
LocalDate.of(2021, 8, 8),
LocalDate.of(2021, 8, 9),
LocalDate.of(2021, 8, 10),
LocalDate.of(2021, 8, 11),
LocalDate.of(2021, 8, 12),
LocalDate.of(2021, 8, 13),
LocalDate.of(2021, 8, 14),
LocalDate.of(2021, 8, 15),
null
);
LocalDate today = LocalDate.now();
LocalDate thirdDay = today.plusDays(2);
List<LocalDate> result =
Stream.concat(
list.stream()
.filter(Objects::nonNull)
.filter(date -> !date.isBefore(today) && !date.isAfter(thirdDay)),
Stream.concat(
Stream.of(today),
list.stream()
.filter(Objects::nonNull)
.filter(date ->
date.isBefore(today) || date.isAfter(thirdDay)
).sorted()
)
).collect(Collectors.toList());
DateTimeFormatter dtf
= DateTimeFormatter.
ofPattern("d-MMM-uuuu",
Locale.
ENGLISH);
result.
forEach(e
-> System.
out.
println(e.
format(dtf
))); }
}
aW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGU7CmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyOwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07CgpwdWJsaWMgY2xhc3MgTWFpbiB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJTGlzdDxMb2NhbERhdGU+IGxpc3QgPSBBcnJheXMuYXNMaXN0KAoJCQkJCQkJCQlMb2NhbERhdGUub2YoMjAyMSwgOCwgMSksIAoJCQkJCQkJCQlMb2NhbERhdGUub2YoMjAyMSwgOCwgMiksCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCAzKSwgCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCA4KSwgCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCA5KSwgCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCAxMCksCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCAxMSksIAoJCQkJCQkJCQlMb2NhbERhdGUub2YoMjAyMSwgOCwgMTIpLCAKCQkJCQkJCQkJTG9jYWxEYXRlLm9mKDIwMjEsIDgsIDEzKSwKCQkJCQkJCQkJTG9jYWxEYXRlLm9mKDIwMjEsIDgsIDE0KSwgCgkJCQkJCQkJCUxvY2FsRGF0ZS5vZigyMDIxLCA4LCAxNSksIAoJCQkJCQkJCQludWxsCgkJCQkJCQkJKTsKCgkJTG9jYWxEYXRlIHRvZGF5ID0gTG9jYWxEYXRlLm5vdygpOwoJCUxvY2FsRGF0ZSB0aGlyZERheSA9IHRvZGF5LnBsdXNEYXlzKDIpOwoKCQlMaXN0PExvY2FsRGF0ZT4gcmVzdWx0ID0gCgkJCVN0cmVhbS5jb25jYXQoCgkJCQlsaXN0LnN0cmVhbSgpCgkJCQkJLmZpbHRlcihPYmplY3RzOjpub25OdWxsKQoJCQkJCS5maWx0ZXIoZGF0ZSAtPiAhZGF0ZS5pc0JlZm9yZSh0b2RheSkgJiYgIWRhdGUuaXNBZnRlcih0aGlyZERheSkpLAoJCQkJU3RyZWFtLmNvbmNhdCgKCQkJCQlTdHJlYW0ub2YodG9kYXkpLAoJCQkJCWxpc3Quc3RyZWFtKCkKCQkJCQkJLmZpbHRlcihPYmplY3RzOjpub25OdWxsKQoJCQkJCQkuZmlsdGVyKGRhdGUgLT4gCgkJCQkJCQlkYXRlLmlzQmVmb3JlKHRvZGF5KSB8fCBkYXRlLmlzQWZ0ZXIodGhpcmREYXkpCgkJCQkJCSkuc29ydGVkKCkKCQkJCSkKCQkJKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwoKCQlEYXRlVGltZUZvcm1hdHRlciBkdGYgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oImQtTU1NLXV1dXUiLCBMb2NhbGUuRU5HTElTSCk7CgkJCgkJcmVzdWx0LmZvckVhY2goZSAtPiBTeXN0ZW0ub3V0LnByaW50bG4oZS5mb3JtYXQoZHRmKSkpOwoJfQp9