Java ラムダ式の仕組みとサンプル

Javaのラムダ式の仕組みとサンプルです。

目次

仕組み ラムダ式とは
サンプル 匿名クラスからラムダ式に変更する
  関数型インターフェースを使用する
  ラムダ式の記述の省略
  ラムダ式の引数が2つの場合のサンプル

ラムダ式とは

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

匿名クラスからラムダ式に変更する

匿名クラスからラムダ式に変更することができます。

1.匿名クラス

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-15行目は、匿名クラスです。
10行目のColor1は4行目のインターフェースを指していて実装しています。
→Color1は、クラス名ではありません。

2.ラムダ式

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

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); //青です
	}
}

10行目がラムダ式です。関数型インタフェースの5行目のメソッドの内容を記述しています。
矢印の左側の(String a)が引数で、矢印の右側が引数を受け取って行う処理です。

関数型インターフェースを使用する

上記の3~6行目のインターフェースは、常に作成する必要はありません。
予め代わりとなる関数型インターフェースが用意されています。

上記の引数あり+戻り値ありの場合は、Functionインターフェースを使用します。

以下は、関数型インターフェースのFunctionを使用したサンプルです。

package test1;
import java.util.function.Function;
//@FunctionalInterface
//interface Color1 {
//	String write1(String a);
//}
public class Test1 {
	public static void main(String[] args) {
		
//		Color1 c1 = (String a) -> {return a + "です";};
		Function <String,String> c1 = (String a) -> {return a + "です";};
		
//		String b = c1.write1("青");
		String b = c1.apply("青");
		System.out.println(b); //青です
	}
}

2行目は、Functionをインポートしています。
14行目のapplyは、Functionインターフェスのメソッドです。

主な関数型インターフェースについては以下を参照願います。
Java ラムダ式で関数型インターフェースを使用

ラムダ式の記述の省略

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

package test1;

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

 

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

package test1;

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

 

ラムダ式の引数が2つの場合のサンプル

package test1;

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

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

		String b = c1.write1("赤", "青");
		System.out.println(b); // 赤と青です
	}
}

10行目のラムダ式は、引数が2つあります。

関連の記事

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

△上に戻る