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 + " "));