Java8 に足りないクラスを作ってみた
きしださんのところでJava8を関数型風に・・・ってのが出てて新しいネタ見つけたな〜って思ったんだけど
それはそれとして、実際にJava8のStream使ったコーディングしてると絶対に欲しくなるのが
Tuple
なんでJDKに標準で入ってないんだ??これから入るのか??みたいなクラス
ちょっと作ったので、晒しとくw
値が二つのTuple2。3つ版も作ったけど増やしただけなので晒さないw
public class Tuple2{ public final T1 _1; public final T2 _2; public Tuple2(T1 t1,T2 t2) { _1 = t1; _2 = t2; } public static Tuple2 t2(T1 t1,T2 t2) { return new Tuple2(t1,t2); } }
使い方は・・・Java8のStreamクラス使ったらすぐ判る
あと、例外を何とかしたいなぁ〜って思って作ったクラスとメソッド
@FunctionalInterface public interface FunctionThrowable{ /** * Compute the result of applying the function to the input argument * * @param t the input object * @return the function result */ R apply(T t) throws Exception; public static Function throwable(Logger log , String msg , FunctionThrowable f) { return (t) -> { try { return f.apply(t); } catch (Throwable e) { log.error(msg,e); throw new RuntimeException(e); } }; } }
Functionクラスを引数に取るメソッドに
FunctionThrowable.throwable(logger,"エラーの時に出すメッセージ",(t) -> {return 例外を出すメソッド();})
ってやれば、例外をログに書いてRuntimeExceptionを出して終わり
まぁRuntimeExceptionのままにするのはあんまり良くないので、プロジェクトに合わせて適当に改善した方が良いと思う。