Java8から導入されたラムダ式の記述について備忘録と共に初心者向けに解説していきます。
ラムダ式とは
ラムダ式とは、Java8から導入された、メソッドを変数のように扱うことのできる記述様式のことです。
ラムダ式を使用することで、記述が簡略化でき、より読みやすいコードを書けるようになります。
また、StreamAPIなどの関数型インターフェースを使用する際にラムダ式を使用すると、非常に簡単に記述ができます!!
ラムダ式の記述方法
まずは早速ですが、ラムダ式の実際の記述方法について説明します。
public static void main(String[] args) {
Runnable runner = () -> System.out.println("Hello");
runner.run(); //Hello
}
上記はrunnableインターフェースをラムダ式を用いて記述したものです。
匿名クラスから、さらに「new Runnabl(){}」と「public void run」を省略した形になります。
また、ラムダ式で使用できるのは抽象メソッドが一つのインターフェースのみとなるので注意が必要です。
引数の型はコンパイラーによって自動的に推定されるので記述する必要はありません。ただ、いつも通りに型を記述してもコンパイルエラーになることはありません。
※引数が複数あり、片方だけ省略するとコンパイルエラーになります。
StreamAPI
ラムダ式と同じくJava 8で追加された機能「Stream API」は、ListやCollectionなどの要素の集合に対して処理を行う場合に便利なAPIです。
StreamAPIはラムダ式を前提として作られているので非常に相性が良いです。
例えば、1~6の中で偶数だけを表示する処理は以下のように書くことができます。
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6);
integerList.stream()
.filter(i -> i % 2 == 0)
.forEach(i -> System.out.println(i));
他のStreamAPIも紹介していきます。
forEach
Listの中身をループさせます。非常に簡単に記述できます。
Arrays.asList(new Integer[] { 1, 2, 3, 4, 5, 6 }).forEach(System.out::println);
filter
フィルタリングをするための中間操作で、if文の役目を果たします。
引数には T -> boolean となるラムダ式を渡してあげます。
式がtrueの要素だけを集めます。
Arrays.asList(new Integer[] { 1, 2, 3, 4, 5, 6 }).stream().filter(x -> x > 3).forEach(System.out::println);
map
要素を変換できる中間操作で、要素に対して四則演算をしたり、型の変換まで行えます。
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6);
integerList.stream()
.map(i -> "要素は" + i + "です")
.forEach(i -> System.out.println(i));
最後に
今回紹介したラムダ式やStreamAPIは、従来の書き方で書くこともできます。
しかし、開発現場では自分でコーディングをするだけでなく、他の人が書いたコードを読む機会も多くあります。
他人のプログラムにはラムダ式やStreamAPIが含まれている可能性があるので、慣れておきましょう!