Java ラムダ式のサンプル

Javaのラムダ式のサンプルです。

目次

ラムダ式

インターフェース名 変数 = ( 引数 ) -> { メソッドの処理内容を記述 }
  • 矢印(->)の左側に引数を指定します。
  • 矢印(->)の右側に引数を受け取って行うメソッドの処理内容を記述します。
  • ラムダ式は、関数型インタフェースのメソッドの内容を記述します。
  • 関数型インターフェースとは実装するメソッドがひとつだけのインターフェースです。
  • 関数型インターフェースであるかは@FunctionalInterfaceアノテーションで確認できます。
  • 匿名クラスをラムダ式に変更することができます。
  • Java8で導入されました。
  • 以下は、Oracleのラムダ式のリンクです。
    https://www.oracle.com/technetwork/jp/articles/java/architect-lambdas-part1-2080972-ja.html

匿名クラスとラムダ式のサンプル

匿名クラスからラムダ式に変更することができます。
2つの対応箇所を比較するとわかりやすいので、以下、最初に匿名クラス、次にラムダ式のサンプルです。

匿名クラス

匿名クラスのサンプルです。

package test1;

@FunctionalInterface
interface Color1 {
	String write1(String a);
}
public class Test1 {
	public static void main(String[] args) {

		Color1 c1 = new Color1() {
			@Override
			public String write1(String a) {

				return a + "です";
			}
		};
		
		String b = c1.write1("青");
		System.out.println(b); //青です
	}
}

4-6行目は、独自に作成した関数型インターフェースです。
3行目の@FunctionalInterfaceは関数型インターフェースであるか確認しています。
10-16行目は、匿名クラスです。
10行目のColor1は4行目のインターフェースを指していて実装しています。
12-14行目は、5行目のメソッドの内容を記述しています。
18行目で処理を実行しています。

 

ラムダ式

上記の匿名クラスをラムダ式に変更したサンプルです。

package test1;

@FunctionalInterface
interface Color1 {
	String write1(String a);
}
public class Test1 {
	public static void main(String[] args) {
		
		Color1 c1 = (String a) -> {return a + "です";};
		
		String b = c1.write1("青");
		System.out.println(b); //青です
	}
}

4-6行目は、独自に作成した関数型インターフェースです。
3行目の@FunctionalInterfaceは関数型インターフェースであるか確認しています。
10行目がラムダ式です。関数型インタフェースの5行目のメソッドの内容を記述しています。
矢印の左側の(String a)が引数で、矢印の右側が引数を受け取って行う処理です。
12,13行目は、匿名クラスのコードの17,18行目と同じ結果になります。

 

ラムダ式の記述の省略

上記の10行目は、引数の型であるStringを省略できます。

		Color1 c1 = (a) -> {return a + "です";};

 

さらに引数がひとつの場合、引数を囲む( )を省略できます。引数が2つ以上のときは()が必要です。
また矢印の右側のreturnと { };を省略できます。

		Color1 c1 = a -> a + "です";

 

関連の記事

Java ラムダ式で関数型インターフェースを使用するサンプル
Java 匿名クラスのサンプル
Java 標準アノテーションのサンプル

△上に戻る