Chương 5: Java Stream API

Câu 1: Phần tử nào dưới đấy có thể dùng với lambda (chọn 2 đáp án)
A. Interface Comparable
B. Interface Compartor
C. Method remove của interface Collection
D. Method removeAll của interface Collection
E. Method removeIf của interface Collection
Câu 2: Chọn đoạn code điền vào ① để chương trình sau chạy và in ra toàn bộ phần tử của set  (chọn 3 đáp án )

A. System.out.println(s)
B. System::out::println
C. System.out::println
D. () -> System.out.println(s)
E. s -> System.out.println(s)
F. (s) -> System.out.println(s)
Câu 3: Compile và chạy đoạn code sau kết quả là (chọn 1 đáp án)

A. {1=10, 3=30}
B. {1=10,2=null, 3=30}
C. {1=40, 3=60}
D. {1=40,2=null, 3=60}
E. {1=13, 3=33}
F. {1=13, 2=null, 3=33}
G. compile error
Câu 4: Chọn đáp án đúng khi nói về stream API (chọn 2 đáp án)
A. method reduce() là intermediate operations
B. method peek() là terminal operations
C. intermediate operation có thể gọi sau khi gọi terminal operations
D. terminal operations sẽ trả về Stream
E. Trong 1 Stream chỉ có 1 terminal operations
F. terminal operations là xử lý cần thiết để lấy kết quả từ pipeline của stream
Câu 5: Compile và chạy đoạn code sau kết quả là (chon 1 đáp án)

A. Dòng thứ 5 compile error
B. Dòng thứ 6 và 7 compile error
C. compile success nhưng khi chạy thì bị treo
D. false true
E. true true
F. false false
Câu 6: Chọn câu đúng khi nói về method của intStream interface (chọn 2 đáp án)
A. method sum() trả về kiểu int
B. method sum() trả về kiểu OptionalInt
C. method findAny() trả về kiểu int
D. method findAny() trả về kiểu OptionalInt
E. method average() trả về kiểu int
F. method average() trả về kiểu OptionalInt
Câu 7: Chọn code điền vào ① để chương trình in ra màn hình 2 (chọn 2 đáp án)

A. if(op.isPresent()) System.out.println(op.get());
B. if(op.isPresent()) System.out.println(op.getAsLong());
C. if(op.ifPresent()) System.out.println(op.get());
D. if(op.ifPresent()) System.out.println(op.getAsLong());
E. op.ifPresent(System.out.println);
F. op.ifPresent(System.out:println);
Câu 8: Chọn đáp án để chương trình sau in ra màn hình 12345 (chọn 3 đáp án)

A.  Dòng thứ 7 đổi từ [i -> i++] thành [i -> ++i]
B. Dòng thứ 9 đổi từ [map(i->i)] sang [map(i -> “” +i)]
C. Dòng thứ 10 đổi từ Collectors.joining() sang Collectors.joining(“”)
D. Sửa theo 3 đáp án A,B,C sẽ in ra kết quả 12345
E. sau method collect() thêm forEach(System.out::println)
F. Bao toàn bộ đoạn code trên trong System.out.println()
Câu 9: Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)

A. 5678
B. 6789
C. compile success nhưng ko in ra gì
D. compile success nhưng khi chạy bị treo
E. compile error
Câu 10: Có 1 stream chứa các phần tử Integer. Sử dụng patitioningBy() của Collectors để làm đối số cho method collect của stream. Kiểu trả về của method collect có thể lưu vào biến có kiểu nào sau đây (chọn 2 đáp án)
A. Map<boolean, List<Integer>>
B. Map<Boolean, List<Integer>>
C. Map<String, List<Integer>>
D. Map<Integer, List<integer>>
E. Map<boolean, Set<Integer>>
F. Map<Boolean, Set<Integer>>
Câu 11:  Chọn đoạn code cho ra kết quả giống với đoạn code dưới đây (chọn 1 đáp án)

A. IntStream.iterate(10, 15).forEach(System.out::print);
B. IntStream.generate(10, 15).forEach(System.out::print);
C. IntStream.sum(10, 15).forEach(System.out::print);
D. IntStream.range(10, 15).forEach(System.out::print);

  • Các function reduce, sum, forEach, noneMatch, anyMatch là Terminal operation (終端操作) sau khi dc gọi sẽ ko thể gọi các function là terminal operation khác
  • stream chỉ có thể gọi 1 terminal operation
  • Các function peek, filter là Intermediate operation (中間操作) sau khi dc gọi sẽ trả về 1 stream khác
  • Tạo stream bằng generator hoặc interate nếu ko set limit sẽ bị hang out (ハング)
  • Phương thức findAny trả về Optional Int, verage trả về Optional double
  • Phương thức flatmap sẽ chuyển thành stream của các stream
  • Sau khi collect với Collectors.joining stream sẽ trở thành 1 string duy nhất. Vì thế khi map phải trả về string.
  • Sinh dữ liệu bằng iterate cần dùng ++i nếu dùng i++ sẽ sinh ra stream toàn giá trị 1

  • java/util/stream/Stream.java

  • stream.collect(Collectors.partitioningBy(…)) và stream.collect(Collectors.groupingBy(…)) xử lý khác nhau khi đầu vào là stream rỗng. PartitioningBy vẫn trả về 2 nhóm true {} và false {} còn groupingBy chỉ trả về {}
  • method peek nếu ko có terminal operation thì ko in ra được.
  • java.io.BufferedReader và java.nio.file.Files có phương thức lines để đọc file thành stream
  • Comparator có phương thức static comparing chỉ cần đưa 1 giá trị vào sẽ sắp xếp. Còn phương thức compare cần đưa 2 giá trị kiểu T
  • allMatch giống với && nếu 1 cái sai sẽ ko chạy tiếp
  • Tạo stream từ array: Array.stream(arrayVariable)

Đáp án:

  1. B E
  2. C E F
  3. F
  4. E F
  5. C
  6. A D
  7. B F
  8. A B F
  9. E
  10. B F
  11. D

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *