talosのプログラミング教室

Java Silver合格への道 ~関数型インタフェースとラムダ式~

スポンサーリンク

こんにちは。たろすです。

今回は関数型インタフェースとラムダ式についてです。

関数型インタフェースとは

抽象メソッドが1つだけのインタフェースのことを関数型インタフェースといいます。

関数が「入力が1つに決まると出力も1つに決まるもの」であることを考えると覚えやすいと思います。

ラムダ式

Java8から追加された機能です。

ラムダ式を使うことで関数型インタフェースを簡潔に実装することができます。

違いを表すためにまずは従来の方法で実装してみます。

public interface SampleInterface {

	void output(String str);
}
public class SampleClass implements SampleInterface {

	@Override
	public void output(String str) {
		// TODO 自動生成されたメソッド・スタブ

		System.out.println(str);
	}

}
public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleClass sc = new SampleClass();
		sc.output("Hello, world!");
	}

}

こんな簡単な処理を行うだけでも、わざわざクラスを1つ作る必要があります。


続いてラムダ式を使用した実装です。
(インタフェースは同じなので省略します)

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleInterface si = (String str) -> {
			System.out.println(str);
		};
		si.output("Hello, world!");
	}

}

ラムダ式を使うとこのように呼び出し元だけで完結します。
(SampleClassが不要になりました)

しかももっと簡潔に書くこともできます。

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleInterface si = str -> System.out.println(str);
		si.output("Hello, world!");
	}

}


省略できるポイント

1. 引数の型を省略できる
2. 引数が1つで型を省略する場合は()を省略できる
3. 処理が1つの場合は{}を省略できる(※)

※ 処理がreturnの場合は必ずreturnも省略する必要があります。
例:SampleInterface si = str -> {return str}; 
  ⇒ ○ SampleInterface si = str -> str;
    × SampleInterface si = str -> return str;

おわりに

今回は関数型インタフェースとラムダ式について説明しました。

難しいですが少しでも合格の可能性を上げるためにはできるようにしておきましょう。