Nội dung chính trong chương: A. Why Lambdas??? B. The syntax of Lambda Expressions C. Functional interfaces A. Why Lambdas??? Quan sát 3 ví dụ sau: Ví dụ 1: Tạo một lớp Worker, cấp phát cho một đối tượng của lớp đó 1 vùng nhớ, thiết lập cho nó một luồng riêng class Worker implements Runnable { public void run() { for (int i = 0; i < 1000; i++) doWork();… }…} Worker w = new Worker();new Thread(w).start();
Trang 1CHƯƠNG 1: LAMBDA
EXPRESSIONS
Giáo viên hướng dẫn : Nguyễn Hồng Quang
1
Trang 2Nội dung
2
Trang 3I Mô tả yêu cầu
A Mô tả yêu cầu
B Nội dung chính trong phần lý thuyết
C Nội dung bài tập
3
Trang 4I Mô tả yêu cầu
A Mô tả yêu cầu
Yêu cầu:
Làm báo cáo
Trình bày slide phần lý thuyết chương 1 (1.1 1.3)
Tự đặt ra 3 câu hỏi trắc nghiệm liên quan đến phần mình làm
4
Trang 5I Mô tả yêu cầu
B Nội dung chính trong phần lý thuyết
Why Lambdas???
The Syntax of Lambda Expressions
Functional Interfaces
5
Trang 6I Mô tả yêu cầu
C Nội dung bài tập
Tự đặt ra 3 câu hỏi trắc nghiệm liên quan đến
phần mình làm và trong mỗi câu có 4 đáp án
6
Trang 7II Nội dung chính trong chương I
A Why Lambdas???
B The syntax of Lambda Expressions
C Functional interfaces
Trang 8II Nội dung chính trong
chương I
A Why Lambdas???
Quan sát 3 ví dụ sau:
Ví dụ 1: Tạo một lớp Worker, cấp phát cho một đối tượng của
lớp đó 1 vùng nhớ, thiết lập cho nó một luồng riêng
class Worker implements Runnable {
public void run() {
for (int i = 0; i < 1000; i++)
doWork();…
}…
}
Worker w = new Worker();
new Thread(w).start();
Trang 9II Nội dung chính trong
chương I
A Why Lambdas???
Quan sát 3 ví dụ sau:
Ví dụ 2: Tạo một lớp sắp xếp xâu theo độ dài của nó
class LengthComparator implements Comparator <String>
{
public int compare(String first, String second) {
return Integer.compare(first.length(), second.length());
} }
Arrays.sort(strings, new LengthComparator());
Trang 10II Nội dung chính trong
chương I
A Why Lambdas???
Quan sát 3 ví dụ sau:
Ví dụ 3: Tạo một button để gọi lại hoạt động trong một
phương thức của một lớp thực thi việc lắng nghe các hoạt động của giao diện
button.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Thanks for clicking!"); }
}
Trang 11II Nội dung chính trong
chương I
A Why Lambdas???
Ta có thể thấy một số đặc điểm:
Muốn thêm chức năng khác nữa ta phải tạo thêm một phương thức.
Có khi cả chương trình ta chỉ sử dụng phương thức đó 1 lần
Lập trình viên phải code mệt hơn
Trình biên dịch chạy tốn tài nguyên hơn vì còn phải rà soát lỗi cú pháp trong từng dòng
Trang 12II Nội dung chính trong
chương I
B The syntax of Lambda Expressions
(arguments) (body)
Ví dụ
(String first, String second) {
if (first.length() < second.length()) return -1;
else if (first.length() > second.length()) return 1; else return 0;
}
() { for (int i = 0; i < 1000; i++) doWork(); }
Trang 13II Nội dung chính trong
chương I
B The syntax of Lambda Expressions
Từ đó ta có thể suy ra cấu trúc của biểu thức lambda:
Biểu thức có thể cần hoặc không cần, cần nhiều tham số
Kiểu dữ liệu của tham số có thể được định nghĩa rõ ràng hoặc được suy đoán từ ngữ cảnh
Tham số đặt trong các dấu ngoặc đơn phải được phân cách nhau bằng dấu “phẩy”
Nếu kiểu dữ liệu của tham số không rõ ràng thì dấu ngoặc đơn là không bắt buộc
Phần thân (body) của biểu thức có thể có hoặc không có hoặc
có một khối lệnh
Nếu phần thân (body) chỉ là một dòng mã lệnh thì dấu ngoặc đơn là không cần thiết
Trang 14II Nội dung chính trong
chương I
C Functional interfaces
Chúng ta cũng có thể thêm 1 biểu thức lambdas mọi nơi trong các phương thức của 1 lớp giao diện.
Ví dụ:
public class Main{
Processor stringProcessor = (String str) str.length();
String name = “Java Lambda”;
int length = stringProcessor.getStringLength (name);
} }
@FunctionalInterface interface Processor{
int getStringLength(String str);
}
Trang 15I Câu hỏi trắc nghiệm
Câu 1: Tại sao java lại bổ sung thêm biểu thức
lambda vào???
A Họ cảm thấy thích thú với nó thì họ thêm vào
B Để giúp cho lập trình viên dễ dàng hơn trong khi lập trình và để chương trình dễ compiler hơn
C Do Sun muốn thu hút thêm lập trình viên java
D Do Oracle muốn thu hút thêm lập trình viên java
III Bài tập
Trang 16I Câu hỏi trắc nghiệm
Câu 2: Trong các câu sau, câu nào viết sai cú
pháp của biểu thức lambda.
A (int a; int b) { return a+b;}
B () system.out.println(“hello world”);
C (String s) { system.out.println(s);}
D () 42;
III Bài tập
Trang 17I Câu hỏi trắc nghiệm
Câu 3: Phát biểu nào là đúng
A Ta cũng có thể thêm 1 biểu thức lambdas mọi nơi trong các phương thức của 1 lớp giao diện
B Ta chỉ được thêm biểu thức lambda vào hàm main
C Ta chỉ được thêm biểu thức lambda vào những phương thức nào được public
D Ta chỉ được thêm vào comment
III Bài tập
Trang 18I Câu hỏi trắc nghiệm
Đáp án đúng của cả 3 câu trắc nghiệm:
Câu 1 – B
Câu 2 – A
Câu 3 – A
III Bài tập