CUBは子供の白熊

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

第3章 ラムダ式を使ったプログラミング : 問題 21 : Future の型変換

問題

Future<T>Future<U>に変換するメソッド

<T, U> Future<U> map(Future<T> future, Function<T, U> mapper)

を実装せよ

解答

特にこれと言った工夫もないのだけど…

public static <T, U> Future<U> map(Future<T> future, Function<T, U> mapper) {
    return new new Future<U>() {
        // タスクの実行の取り消しを試みる
        public boolean cancel(boolean mayInterruptIfRunning) {
            return future.cancel(mayInterruptIfRunning);
        }
        // 正常に完了する前に取り消されたか?
        public boolean isCancelled() {
            return future.isCancelled();
        }
        // タスクが完了したか?
        public boolean isDone() {
            return future.isDone();
        }
        // 計算結果の取得
        public U get() throws InterruptedException, ExecutionException {
            return mapper.apply(future.get());
        }
        // タイムアウト指定ありの計算結果の取得
        public U get(long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException {
            return mapper.apply(future.get(timeout, unit));
        }
    };
}