はじめての Lambda vol.4

はじめての Lambda シリーズも4回目となりました。

今回は Method Reference を使ってみることにします。

Method Reference って名前のとおりメソッド参照です。

メソッドに対する参照だけです。

よって、はじめての Lambda vol.2 でのサンプルコードの最大値を求める部分を

Method Reference に置き換えることができます。

下記コードのように非常に簡潔になります。(^_^)v

jp\yucchi\hello_lambda_2\Hello_Lambda_2.java
package jp.yucchi.hello_lambda_2;

import java.util.ArrayList;
import java.util.List;

public class Hello_Lambda_2 {

    public static void main(String[] args) {
        List ladies = new ArrayList<>();
        ladies.add(new Lady(80, 20));
        ladies.add(new Lady(70, 14));
        ladies.add(new Lady(85, 30));
        ladies.add(new Lady(90, 24));
        ladies.add(new Lady(100, 10));
        int maxBust = ladies.filter(l -> l.age > 15 && l.age < 26)
                .map(l -> l.bustSize)
                //.reduce(0, (left, right) -> Math.max(left, right));
                // Method Reference を使うように変更
                .reduce(0, Math::max);
        System.out.println("16歳以上、26歳未満で一番大きな胸のサイズは" + maxBust + "です。");
    }

    private static class Lady {

        int bustSize;
        int age;

        public Lady(int bustSize, int age) {
            this.bustSize = bustSize;
            this.age = age;
        }
    }
}

Math::max の部分が Method Reference を利用したコードです。

こんなにすっきりしたコードで本当にちゃんと動くのか?

試してみました。

Method Reference

 

おおっ! ちゃんと動いてるじゃないか!

一時期、Method Reference に :: と # どちらを使うかで熱い議論がなされていた。(今も?)

Java™ Platform, Standard Edition 8 Developer Preview with Lambda Support b 39 では

:: (ダブルコロン)が採用されているようです。

Java 8 で Lambda が実装されたら馴染みのない素敵なコードを見ることができるような気がします。

Hatena タグ:

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です