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