遠き君へ

〜インターネットの最果てで自分語りを垂れ流すブログ〜

Javaのメソッド参照はメソッド呼び出しをチェーンしてても使える

なぜか勘違いしていたシリーズ第2弾。

基本的にメソッド参照で書けるときはメソッド参照で書きたい派(文字列あたりの情報量が多くなることが多いから)なのですが、
なぜか、「メソッド呼び出しをチェーンした時点でメソッド参照は使えない」と今まで勘違いしてました。

でも、最後のメソッド呼び出しがメソッド参照の条件を満たしてさえいればメソッド参照使えます。

import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) {
    System.out.println("---------- start1 ----------");
    // 乱数(一桁の非負整数)から素数だけを抽出
    new Random().ints(10, 0, 10)
        .filter(i -> Arrays.asList(2, 3, 5, 7).contains(i)) // ラムダ式
            .forEach(System.out::println);

    System.out.println();
    System.out.println("---------- start2 ----------");
    // 上はこうも書ける
    new Random().ints(10, 0, 10)
        .filter(Arrays.asList(2, 3, 5, 7)::contains)    // メソッド参照
            .forEach(System.out::println);
    }
}

System.out::printlnは今までも普通に使ってたのに気づかなかったなぁ。。。

これで「うおーーもっとメソッド参照使える箇所増えるのでは???」と思ったんですが、
最後のメソッド呼び出しが引数1つでそれがストリームの要素、ってわりと条件きついから
あんまり増えませんでしたね。。。(今見てる範囲だと例で使ったcontains()filter()系くらいか。。。)

あと引数0のパターンだと、これは確かにメソッド呼び出しがチェーンした時点で成立することはない、であってるかな?

background image is created by Niellyn & bhsav.