Given the code fragments:



and

What is the result?

A.

2

B.

3

C. A compilation error occurs at line n1.
D. A compilation error occurs at line n2.

題解

CourseFilter介面繼承了Predicate介面,並使用Java 8之後新出的預設方法功能來實作Predicate介面的test方法,判斷傳入test方法的參數是否為「Java」字串。

程式第16行,使用Java 8之後新出的Lambda語法來快速實作出Predicate介面的test方法,判斷傳入test方法的參數所參考的字串物件的長度是否大於3。有關Lambda語法的介紹可以參考這篇文章:

https://magiclen.org/java-8-lambda/

程式第17行,使用匿名類別實作CourseFilter介面,再次覆寫已經在CourseFilter介面中用預設方法實作過的test方法,判斷傳入test方法的參數是否包含「Java」子字串。

程式第22行,將集合轉為串流。

程式第23行,保留長度大於3的字串物件,其餘的丟棄。在此所有元素都會被保留。

程式第24行,保留集合中的包含「Java」子字串的字串,其餘的丟棄。在此所有元素都會被保留。

程式第25行,計算集合的元素數量。此時元素數量為3。

程式第26行,輸出集合的元素數量「3」。