はじめての 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 に :: と # どちらを使うかで熱い議論がなされていた。(今も?)
Java™ Platform, Standard Edition 8 Developer Preview with Lambda Support b 39 では
:: (ダブルコロン)が採用されているようです。
Java 8 で Lambda が実装されたら馴染みのない素敵なコードを見ることができるような気がします。
Hatena タグ: Java