Given the code fragment:



List<Integer> list1 = Arrays.asList(10, 20);
List<Integer> list2 = Arrays.asList(15, 30);
//line n1

Which code fragment, when inserted at line n1, prints 10 20 15 30?

A.

Stream.of(list1, list2)
.flatMap(list -> list.stream())
.forEach(s -> System.out.print(s + " "));
B.
Stream.of(list1, list2)
.flatMap(list -> list.intStream())
.forEach(s -> System.out.print(s + " "));
C.
list1.stream()
.flatMap(list2.stream().flatMap(e1 -> e1.stream())
.forEach(s -> System.out.println(s + " "));
D.
Stream.of(list1, list2)
.flatMapToInt(list -> list.stream())
.forEach(s -> System.out.print(s + " "));

題解

Stream物件的flatMap方法可以將串流物件中的元素展開成新的Stream物件。

選項A,正確答案。

選項B,Stream物件並沒有intStream方法。

選項C,e1的型態是整數,所以沒有stream方法。

選項D,Stream物件的flatMapToInt方法,可以將串流物件中的元素展開成新的IntStream物件。所以傳入的mapper參數的Lambda語法,應該要能回傳IntStream物件才行。如果改成如以下程式,則選項D正確:

Stream.of(list1, list2)
.flatMapToInt(list -> list.stream().mapToInt(e -> e))
.forEach(s -> System.out.print(s + " "));