Câu 1: Chọn cách khai báo biểu thức lambda đúng (chọn 2 đáp án)
A. () ->
B. () -> “”
C. x,y -> x*y
D. (Foo f) -> return -1
E. (Foo f) -> {return; }
F. Foo f -> “java”
G. (Foo f1, f2) -> 0
Câu 2: Chọn functional interface phù hợp để điền vào các chỗ trống (chọn 3 đáp án)
1 2 3 |
「①」obj1 = String::new; 「②」obj2 = (a, b) -> System.out.println(a+b); 「③」obj3 = a -> a.toUpperCase(); |
A. Function<String>
B. Supplier<String>
C. BiConsumer<String, String>
D. BiFunction<String, String>
E. BinaryConsumer<String, String>
F. BinaryFunction<String, String>
G. UnaryOperator<String>
H. UnaryOperator<String, String>
Câu 3: Chọn đoạn code tương đương với đoạn code sau (chọn 1 đáp án)
1 |
UnaryOperator<Integer> 0 = a -> a*15; |
A. Function<Integer> obj = a -> a*15;
B. Function<Integer, Integer> obj = a -> a*15;
C. BiFunction<Integer> obj = a -> a * 15;
D. Bi Function<Integer, Integer> obj = a -> a*15;
E. BinaryOperator<Integer> obj = a -> a*15;
F. BinaryOperator<Integer, Integer> obj = a -> a*15;
Câu 4: Interface có method trả về kiểu dữ liệu nguyên thủy là (chọn 3 đáp án)
A. BooleanSupplier
B. CharSupplier
C. ByteSupplier
D. IntSupplier
E. FloatSupplier
F. DoubleSupplier
Câu 5: Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.function.*; public class Foo { int val; public static void main(String[] args){ Foo obj = new Foo(); obj.val = 20; method(obj, a -> a.val < 100); } static void method(Foo obj, Predicate<Foo> p){ String ans = p.test(obj) ? "hello" : "bye"; System.out.println(ans); } } |
A. hello
B. bye
C. Dòng thứ 7 compile error
D. Dòng thứ 9 compile error
E. Dòng thứ 10 compile error
Câu 6: Chọn code tương đương với Class Foolmpl dưới đây (chọn 2 đáp án)
1 2 3 4 |
interface Foo { int bar(double d);} class FooImpl implements Foo { public int bar(double d) {return -1;} } |
A. Foo f = d-> -1;
B. Foo f = d -> {-1};
C. Foo f = d -> {int d = -1; d};
D. Foo f = d -> {int d = -1; return d;};
E. Foo f = d-> {int i = -1; return i};
F. Foo f = d -> {int i = -1; return i;};
Câu 7: compile và chạy chương trình sau kết quả là (Chọn 1 đáp án)
1 2 3 4 5 6 7 8 9 10 |
interface Foo { boolean bar(double a, double b);} class Test{ public static void main(String[] args){ method((x,y) -> x/y, 3.0); } static void method(Foo obj, double d){ if(obj.bar(9.0, d)) System.out.println("a"); else System.out.println("b") } } |
A. a
B. b
C. Dòng thứ 4 compile error
D. Dòng thứ 6 compile error
E. Dòng thứ 7 compile error
- Ví dụ reference method. Reference method sẽ tự biết đối số để sử dụng
1 |
System.out::println |
- Khởi tạo Foo mà ko có kiểu <> thì sẽ bị warning
- Các kiểu dữ liệu cơ bản của functional Interface int, double, boolean
- Các functional interface căn bản:
Function(T,R) R apply(T t)
BiFunction(T,U,R) R apply(T t, U u)
Consumer(T) void accept(T t)
BiConsumer(T,U) void accept(T t, U u)
Predicate(T) Boolean test(T t)
BiPredicate(T, U) Boolean test(T t, U u)
Supplier(T) T get()
UnaryOperator(T) T apply(T t)
BinaryOperator(T) T apply(T t1, T t2)
- intFunction có đầu vào và đầu ra đều là int. ToIntFunctiona có đầu vào bất kỳ đầu ra là int
Đáp án:
- B E
- B C G
- B
- A D F
- A
- A F
- C