Java SE 8 で関数合成
以前 に Groovy や Scala 等で実施した関数合成と同様の処理を Java 8 で試してみました。
- Java SE 8 EA b102 (現時点の最新は b104 のようです)
サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20130901/
andThen と compose
Java 8 では Scala と同様に andThen や compose メソッドを使います。 処理の実行にも apply メソッドを使いますが、Scala のようなメソッド名の省略はできません。
なお、andThen・compose メソッドは java.util.function.Function インターフェース等にデフォルト実装されています。
ComposeSample.java
import java.util.function.Function; public class ComposeSample { public static void main(String... args) { Function<Integer, Integer> plus = (x) -> x + 3; Function<Integer, Integer> times = (x) -> x * 2; // (4 + 3) * 2 = 14 : plus -> times System.out.println(plus.andThen(times).apply(4)); // (4 * 2) + 3 = 11 : times -> plus System.out.println(plus.compose(times).apply(4)); } }
今回のような用途には Function<Integer, Integer> の代わりに IntFunction を使いたいところですが、今のところ IntFunction は Function を extends しておらず andThen・compose メソッドは使えないようです。
実行結果
> java ComposeSample 14 11