主な関数型インターフェースとラムダ式での記述方法について
ラムダ式と関数型インターフェースについて学んだので記事にしてみようと思います。
ラムダ式を利用する理由として、関数型インターフェースを簡潔に利用できるというメリットが大きいので、まずは主な関数型インターフェイスを紹介しておきます。
インターフェイス名 | 抽象メソッド名 | 処理 |
---|---|---|
Function< T , U > | R apply(T t) | 実装するメソッドは引数としてTを受け取り、Uを返す |
Consumer< T > | void accept(T t) | 実装するメソッドは引数としてTを受け取り、何も返さない |
Predicate< T > | boolean test(T t) | 実装するメソッドは引数としてTを受け取り、boolean値を返す |
Supplier< T > | T get() | 実装するメソッドは引数を受け取らず、Tを返す |
ラムダ式の使い方はこちらになります。
左辺にはメソッドの引数を記述し、"->"を記載したあとにメソッドの処理内容を記述します。
まずはラムダ式を利用せずに関数型インターフェースを利用したコードを書いてみます。
public class Main{
public static void main (String[] args){
int u = new Function<Integer,Integer>(){
public Integer apply(Integer i) {
return i + 10 ;
}
}.apply(5);
}
}
上記のコードをラムダ式を利用して、コードを記載してみます
public class Main{
public static void main (String[] args){
Function<Integer,Integer> foo = (Integer i) -> {
return i + 10 ;
};
Integer u = foo.apply(5);
}
3行目でFunctionインターフェイスの実装クラスfooを宣言し、抽象メソッドapplyの処理を定義しています。
一つ目のコードと比べてコードが簡潔になっていますが、ラムダ式では更に記述を省略できます。
(Integer i)
引数が一つの場合は()が省略でき、引数の型はインターフェースクラスの宣言時に決定しているため、データ型の宣言も省略できます。
{
return i + 10 ;
}
処理が一行の場合は、{}が省略でき、{}が省略されている場合はreturnも省略できます。
これらの省略を行ったコードがこちらになります。
public class Main{
public static void main (String[] args){
Function<Integer,Integer> foo = i -> i + 10 ;
Integer u = foo.apply(5);
}
}
まとめ
- 関数型インターフェースをラムダ式で実装する事でコードを簡潔に記述できる。
-
( 実装するメソッドの引数 ) -> { 処理 }
でラムダ式を記述できる