web-dev-qa-db-ja.com

System.out :: printlnの同等のラムダ式は何ですか

私は次のようにつまずきましたJava System.out.printlnのメソッド参照を使用しているコード

class SomeClass{
    public static void main(String[] args) {
           List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);
           numbers.forEach(System.out::println);
        }
    }
}

System.out::printlnの同等のラムダ式は何ですか?

22
Steve

メソッド参照_System.out::println_は、最初に_System.out_を評価してから、ラムダ式に相当するキャプチャ評価値を作成します。通常は、
o->System.out.println(o)は、メソッド参照と同じことを実現しますが、このラムダ式は、メソッドが呼び出されるたびに_System.out_を評価します。

したがってexactは次のようになります。

_ PrintStream p = Objects.requireNonNull(System.out);
 numbers.forEach(o -> p.println(o));
_

これは、誰かがSystem.setOut(…);を途中で呼び出した場合に違いをもたらします。

39
Holger

それは:

numbers.forEach(i -> {System.out.println(i);});

またはさらに簡単:

numbers.forEach(i -> System.out.println(i));
5
Eran