Java のラムダ式
何書くか悩みましたが、今回は Java 8 で導入されたラムダ式について
今更!? って思われるかもしれませんが、
私自身理解するのに苦労したので、まとめるという意味で書きます。
ラムダ式とは
ラムダ式をとっても簡単に説明すると
メソッドの引数に処理を渡すための構文だと思ってください。
ラムダ式のサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} | |
} |
ラムダ式で書かれている部分は下記のとおりです 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 について触れれば、
ラムダ式のメリットが分かると思いますのでそちらで。