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つの場合は{}を省略できる(※)
例:SampleInterface si = str -> {return str};
⇒ ○ SampleInterface si = str -> str;
× SampleInterface si = str -> return str;