今さら聞けないJavaのラムダ式を3分くらいで(サンプル付)
概要
プログラマーの視点で、シンプルにラムダ式の記載方法を纏める。
浅い知識でラムダ式がなんなのか要約すると
単純な処理(メソッド)をスッキリ書ける方式。
(特にパラメータで処理を渡すとき便利)
ラムダ式で変換
段階を追って省略していく。
■ サンプルで使用する処理
引数の文字列を標準出力するだけの単純な処理
① ラムダ式を使わず普通に書くと
- 何の変哲もない、というか今見ると少し面倒な書き方
new Consumer<String>() { @Override public void accept(String str) { System.out.println(str); } }
② ラムダ式で書くと
- new を使ってインスタンス生成しなくていい
- メソッド名の記載が不要で -> という矢印っぽい記号で指定
(String str) -> { System.out.println(str); }
③ ラムダ式で省略Ⅰ
- パラメータの型の定義は不要
- 処理が1行なら括弧{} はなくてもOK
(str) -> System.out.println(str)
④ ラムダ式で省略Ⅱ
- パラメータが1個ならパラメータの括弧()がなくてもいい
str -> System.out.println(str)
⑤ ラムダ式で省略Ⅲ
- パラメータと処理の中の処理の引数も1個なら省略可
(慣れないと違和感がスゴイが、ともあれ見た目はスッキリ)
System.out::println
実際に確認
- 下記のサンプルソースで試して見る
StudyLambda.java
package com.w_hippo.lambda; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class StudyLambda { public static void main(String[] args){ List<String> lst = Arrays.asList("A01", "A02", "B01", "B02", "B03"); // ① ラムダ式を使わず普通に書くと System.out.println("-------- ① --------"); lst.stream().forEach(new Consumer<String>() { @Override public void accept(String str) { System.out.println(str); } }); // ② ラムダで書くと System.out.println("-------- ② --------"); lst.stream().forEach((String str) -> { System.out.println(str); }); // ③ ラムダ式で省略Ⅰ System.out.println("-------- ③ --------"); lst.stream().forEach((str) -> System.out.println(str)); // ④ ラムダ式で省略Ⅱ System.out.println("-------- ④ --------"); lst.stream().forEach(str -> System.out.println(str)); // ⑤ ラムダ式で省略Ⅲ System.out.println("-------- ⑤ --------"); lst.stream().forEach(System.out::println); } }
実行結果
- すべて同じ結果になる
-------- ① -------- A01 A02 B01 B02 B03 -------- ② -------- A01 A02 B01 B02 B03 -------- ③ -------- A01 A02 B01 B02 B03 -------- ④ -------- A01 A02 B01 B02 B03 -------- ⑤ -------- A01 A02 B01 B02 B03