Java 9のLocalDate.datesUntil()メソッドを使って日付のストリームを取得する方法
LocalDate.datesUntil()メソッドは、2つのLocalDateインスタンス間の日付ストリームを生成し、必要に応じてステップサイズ(間隔)を指定できる便利なAPIです。Java 9で導入されました。このメソッドには2つのバリエーションがあります。1つ目は終了日のみを引数に取り、基準日から終了日までのすべての日付を含むストリームを返します。2つ目はPeriodオブジェクトを第2引数として受け取り、日付をスキップしながら開始日と終了日の間の一部の日付だけを抽出したストリームを取得できます。
構文
public Stream<LocalDate> datesUntil(LocalDate end)
public Stream<LocalDate> datesUntil(LocalDate end, Period step)
使用例
import java.time.LocalDate;
import java.time.Period;
import java.time.Month;
import java.util.stream.Stream;
public class DatesUntilMethodTest {
public static void main(String args[]) {
final LocalDate myBirthday = LocalDate.of(1980, Month.AUGUST, 8);
final LocalDate christmas = LocalDate.of(1980, Month.DECEMBER, 25);
System.out.println("日単位のストリーム:\n");
final Stream<LocalDate> daysUntil = myBirthday.datesUntil(christmas);
daysUntil.skip(50).limit(10).forEach(System.out::println);
System.out.println("\n月単位のストリーム:\n");
final Stream<LocalDate> monthsUntil = myBirthday.datesUntil(christmas, Period.ofMonths(1));
monthsUntil.limit(5).forEach(System.out::println);
}
}
実行結果
日単位のストリーム:
1980-09-27
1980-09-28
1980-09-29
1980-09-30
1980-10-01
1980-10-02
1980-10-03
1980-10-04
1980-10-05
1980-10-06
月単位のストリーム:
1980-08-08
1980-09-08
1980-10-08
1980-11-08
1980-12-08
ポイント解説
- 終了日は含まれない: datesUntil()が返すストリームには開始日が含まれますが、終了日は排他的(含まれない)点に注意してください。
- Periodで柔軟な間隔指定: 第2引数にPeriod.ofDays()、Period.ofWeeks()、Period.ofMonths()などを渡すことで、日・週・月単位で日付をスキップできます。
- 遅延評価による効率化: Streamは遅延評価されるため、skip()やlimit()と組み合わせることで、大量の日付範囲から必要な部分だけを効率的に処理できます。
-
Javaでフォルダ内のディレクトリ(フォルダ)のみを取得する方法
Javaで特定のフォルダに含まれるファイルではなく、ディレクトリ(サブフォルダ)だけを取得したいケースはよくあります。本記事では、代表的な2つの方法——FileFilterインターフェースを使う方法と、NIOのFiles.walk()を使う方法——をサンプルコード付きで解説します。listFiles()メソッドとFileFilterの基本FileクラスのlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名を、配列として返します。ここで活躍するのがFileFilterインターフェースです。FileFilterはパス名をフィル
-
JavaでJsonPointerインターフェースを使用してJSONのキーの値を取得する方法
JSONPointerは、JSONドキュメント内の特定のキーの値へアクセスするための文字列構文を定義した標準規格です。Jsonクラスの静的ファクトリメソッドであるcreatePointer()を呼び出すことで、JSONPointerのインスタンスを生成できます。JSONPointerでは、すべての文字列構文がスラッシュ「/」で始まるのが特徴です。キーの値を取得するには、JSONPointerオブジェクトに対してgetValue()メソッドを呼び出します。 前提条件 この記事のコードを実行するには、Java EE / Jakarta EEに含まれるJSON Processing(JSON-P)の