【Java】メソッド参照とラムダ式の関係

Java 8以降には、メソッド参照というものがある。全くなじみがなく今まで触れずにいたが、調べてみるとラムダ式をさらに簡略化した記法らしい。

引数をパススルーしているかどうか

Javaをメソッド参照に置き換えられるのは、主にパラメータをパススルーしているかどうかで判断できる。
例えば e -> System.out.println(e) というラムダ式があったとき、パラメータeはそのまま System.out.printlnの引数として渡されている。このとき、eに対しては何の処理もされておらず、ラムダ式はただ単にeを受け取ってそのまま別のメソッドに引数として受け渡すことしかしていない。
このような場合、ラムダ式をメソッド参照で置き換えられることが多い。上記の例であれば、 System.out::println と書くことができる。パラメータの値に対して何か変化がもたらされるわけではないので、これだけで何をしているか十分に理解することができる。

コンストラクタをメソッド参照に置き換える

メソッド参照に置き換えられるのは、staticメソッドだけではない。パラメータをパススルーしていれば、コンストラクタも置き換えることができる。
例えば、 i -> new Card(i) というように、受け取ったパラメータを使って新しいオブジェクトを作るラムダ式があった場合、それは Card::new というように書くことができる。