CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第5章 日付と時刻の新たな API : 問題 3 : TemporalAdjuster

問題

Predicate<LocalDate>を受け取りTemporalAdjusterを返すnextメソッドを実装せよ

戻り値のTemporalAdjusterは、翌日以降でPredicateを満たす日付を生成する
例えば

today.with(next(w -> w.getDayOfWeek().getValue() < 6))

は、今日より後の最初の平日の日付を返す

解答

public static TemporalAdjuster next(Predicate<LocalDate> pred) {
    return t -> {
        LocalDate w = (LocalDate)t;
        do {
            w = w.plusDays(1);
        } while (!pred.test(w));
        return w;
    };
}

■ 検証用コード

LocalDate today = LocalDate.now();
LocalDate weekday = today.with(next(w -> w.getDayOfWeek().getValue() < 6));
System.out.println(weekday);

TemporalAdjusterって便利ですね