第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)); } }; }