mmts1007’s diary

プログラミング関連の技術系ブログです。

Java のラムダ式

何書くか悩みましたが、今回は Java 8 で導入されたラムダ式について

今更!? って思われるかもしれませんが、
私自身理解するのに苦労したので、まとめるという意味で書きます。

ラムダ式とは

ラムダ式をとっても簡単に説明すると
メソッドの引数に処理を渡すための構文だと思ってください。

ラムダ式のサンプル

import java.util.ArrayList;
import java.util.List;
public class HelloLambda {
public static void main(String... args) {
List<String> names = new ArrayList<>();
names.add("sample 1");
names.add("sample 2");
names.add("sample 3");
// Java 7 での書き方
for (String name : names) {
System.out.println(name);
}
// Java 8 での書き方
names.stream().forEach((String name) -> {
System.out.println(name);
});
// 処理が 1行しか無いので、波括弧は省略可能
names.stream().forEach((String name) -> System.out.println(name));
// さらにメソッドの引数は、Stream から推論可能(リストが String型)なため省略可能
names.stream().forEach((name) -> System.out.println(name));
// 引数が 1つの場合は丸括弧省略可能
names.stream().forEach(name -> System.out.println(name));
}
}
gista37e6fba2aafde4cf230

ラムダ式で書かれている部分は下記のとおりです https://gist.github.com/mmts1007/a37e6fba2aafde4cf230#file-hellolambda-java-L17-L19

さらにフォーマットを修正すると下記のとおりです。

(String name) -> { System.out.println(name); }

ラムダ式は下記のように記述をします。

( 処理に渡す引数 ) -> { 処理内容 }

これより names.stream().forEach((String name) -> { System.out.println(name); }); ) の処理は
forEach によって得られた 1 つの要素を name という変数として定義し、処理内容 ( System.out.println ) に渡す
ということを行っています。
よって names の各要素が 1 つずつ標準出力に出力されます。

利用場面

今はラムダ式のメリットが分かりにくいと思いますが、
次の記事に書く Stream API について触れれば、
ラムダ式のメリットが分かると思いますのでそちらで。