0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

主な関数型インターフェースとラムダ式での記述方法について

Posted at

主な関数型インターフェースとラムダ式での記述方法について

ラムダ式と関数型インターフェースについて学んだので記事にしてみようと思います。

ラムダ式を利用する理由として、関数型インターフェースを簡潔に利用できるというメリットが大きいので、まずは主な関数型インターフェイスを紹介しておきます。

インターフェイス名 抽象メソッド名 処理
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);
	}
}

まとめ

  • 関数型インターフェースをラムダ式で実装する事でコードを簡潔に記述できる。
  • ( 実装するメソッドの引数 ) -> { 処理 }でラムダ式を記述できる
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?