Given the code fragment:



List<Integer> values = Arrays.asList(1, 2, 3);
values.stream()
        .map(n -> n * 2) //line n1
        .peek(System.out::print) //line n2
        .count();

What is the result?

A.

246

B. The code produces no output.
C. A compilation error occurs at line n1.
D. A compilation error occurs at line n2.

題解

串流物件的map方法可以取得並取代串流元素的內容。程式第7行會用Lambda語法將所有元素的值乘上2。

串流物件的peek方法可以取得所有串流元素的內容,類似forEach方法,但peek方法會回傳原本的串流物件。程式第8行會用Lambda的精簡語法呼叫標準輸出串流的print方法,依序輸出「246」。

程式第9行用了count方法來計算元素數量,若第8行使用forEach方法而不是peek方法的話,第9行會編譯失敗。