Streams and Lambda – 37

Q001

NO.1 Which code is correct?
A. Runnable r = "Message" -> System.out.println();
B. Runnable r = () -> System.out::print;
C. Runnable r = () -> {System.out.println("Message");};
D. Runnable r = -> System.out.println("Message");
E. Runnable r = {System.out.println("Message")};


Answer: C

Lambda 無參數或多個參數,都要加 ()。

表示式只有一行且有 return ,可以不加 {}。

表示式只有一行且有返回值,無{} 不能加 return。有 {} 要加 return

表示式只有一行且無返回值,有無 {} 都可以。

Consumer<輸入型別> 無返回值,使用 accept 傳入參數,比如

Consumer<String> c = s-> System.out.println(s);
c.accept("Hello");

Function<輸入型別, 返回型別>,使用 apply 傳入參數並取回值,比如

Function<String, Integer> f = s -> s.length();
System.out.println(f.apply("Hello");

Q002

NO.6 Given the code fragment:
 9. Integer[] ints = {1, 2, 3, 4, 5, 6, 7};
10. var list = Arrays.asList (ints) ;
11. UnaryOperator<Integer> uo = x -> x * 3;
12. list.replaceAll(uo);

Which two can replace line 11?
A. UnaryOperator<Integer> uo = (var x) -> (x * 3);
B. UnaryOperator<Integer> uo = var x -> { return x * 3;};
C. UnaryOperator<Integer> uo = x -> { return x * 3;};
D. UnaryOperator<Integer> uo = (int x) -> x * 3;
Answer: AC

UnaryOperator<T> 是 Function<T , T>的特殊化,也就是輸入參數型與返回型態要一樣。

第 11 行 指定資料格式為泛型 Integer,而答案 D 將 x 轉成 int,所以 x*3 的返回值亦為 int,而不是 Integer,所以 D 是錯誤的。

🔒 其餘內容需登入會員。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *