ゼロからはじめるWEBプログラミング入門

未経験者でも初心者でも関係なく、とにかくWEBサイトを作るところから始めるブログ!

今さら聞けないJavaのラムダ式を3分くらいで(サンプル付)

f:id:sbc-web:20170712233510p:plain

概要

プログラマーの視点で、シンプルにラムダ式の記載方法を纏める。

浅い知識でラムダ式がなんなのか要約すると
単純な処理(メソッド)をスッキリ書ける方式。
(特にパラメータで処理を渡すとき便利)


ラムダ式で変換

段階を追って省略していく。

■ サンプルで使用する処理
引数の文字列を標準出力するだけの単純な処理


ラムダ式を使わず普通に書くと

  • 何の変哲もない、というか今見ると少し面倒な書き方
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