CUBは子供の白熊

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

第3章 ラムダ式を使ったプログラミング : 問題 18 : Function と例外

問題

Function<T, U>の抽象メソッドと同じシンタックスでチェック例外をスローするラムダ式からFunction<T, U>を生成する unchecked メソッドを実装せよ

解答

本文にCallable<T>からSupplier<T>を生成する unchecked メソッドが載っている

Callable<T>からSupplier<T>生成

public static <T> Supplier<T> unchecked(Callable<T> f) {
    return () -> {
        try {
            return f.call();
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    };
}

この uncheck メソッドをちょこっと直すだけだが、まずチェック例外をスローする関数型インターフェースを定義する

■ 例外をスローする関数型インターフェース

@FunctionalInterface
public interface ThrowableFunction<T, U> {
    U apply(T t) throws Exception;
}

ThrowableFunction<T, U>からFunction<T, U>生成

public static <T, U> Function<T, U> unchecked(ThrowableFunction<T, U> f) {
    return (t) -> {
        try {
            return f.apply(t);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    };
}