##はじめに
関数型インターフェースのFunctionインタフェースをご存知でしょうか。Functionインターフェースを使用すると処理をキュッとまとめることができます。これによって読みやすいコードにするこどができます。そんなFuncitionインターフェースとおまけにBiFunctionインターフェースについて解説していきます。
##Functionインターフェースとは
引数を1つ受け取ってその引数を使った処理返す関数型インターフェースです。例えば、引数の5を受け取ったとしましょう。その5に1を足す処理を返すというイメージです。Functionは抽象メソッドであるapplyメソッドを持っています。では、サンプルコードを通して具体的に説明していきます。
Functionはジェネリックスの型を2つ受け取ります。
具体的には1つ目の型はappyメソッドの引数の型、2つ目はapplyメソッドの戻り値の型として受け取ります。
##どうやって使うの?
以下のサンプルコードは引数に半径を受け取り、その引数を利用して円の面積を求める処理をしています。Functionは型のパラメータを2つ受け取っています。1つ目は半径(引数)の型を受け取り。2つ目は戻り値の型を受け取っています。最後にapplyメソッドを使って、円の面積を求める処理を呼び出しいます。
import java.util.function.Function;
public class Sample {
public static void main(String[] args) {
Function <Integer, Double> circle= x -> x * x * 3.14;
System.out.println(circle.apply(8));
}
}
##もっと複雑な処理をするには?
複数の引数を使って処理をすれば、もっと複雑な処理を実装できますよね?この時に使用するのが__BiFunction__インターフェースです。2つの引数を受け取り、その引数を引数を使った処理を返す関数型インターフェースです。
##どのように使うの?
Functionとは違い、Bifunctionは3つの型を受け取ります。1つ目は第一引数の型、2つ目は第二引数の型3つ目は戻り値の型です。下記のコードは第一引数に体重を受け取り、第2引数は身長(m)を受け取って、その引数を使ってbmiを求める処理を変数bmiに格納しています。最後にapplyメソッドを使って、その処理を呼び出しています。
import java.util.function.BiFunction;
public class Bmi {
public static void main(String[] args) {
BiFunction <Integer,Double, Double> bmi= (x,y) -> x /Math.pow(y,2);
System.out.println(bmi.apply(58,1.7));
}
}
##まとめ
Functionは引数を1つ受け取ってその引数を使った処理を返す
BiFunctionは引数を2つ受け取ってその引数を使った処理の返す