Given the code fragment:



Stream<List<String>> iStr = Stream.of(
        Arrays.asList("1", "John"),
        Arrays.asList("2", null));
IntStream nInSt = iStr.flatMapToInt((x) -> x.stream());
nInSt.forEach(System.out::print);

What is the result?

A.

1John2null

B.

12

C. A NullPointerException is thrown at run time.
D. A compilation error occurs.

題解

iStr所參考到的串流物件中的元素為字串型態的List物件,無法直接轉換成整數型態的List物件。若修改成以下程式,可以成功編譯:

IntStream nInSt = iStr.flatMapToInt((x) -> x.stream().mapToInt(Integer::valueOf));

以上程式雖然可以成功編譯,但執行時會拋出NumberFormatException,因為「John」字串不能轉成整數。

如果要能成功執行,不應使用flatMapToInt方法,應改寫程式如下:

IntStream nInSt = iStr.mapToInt((x) -> Integer.parseInt(x.get(0)));

改寫之後程式會輸出:

12