Bài viết được sự cho phép của tác giả Kiên Nguyễn
Java 8 xuất hiện với nhiều cải tiến rõ rệt, hãy cùng Kieblog tìm hiểu xem nhưng thay đổi lớn nào đã giúp Java 8 trở nên mạnh mẽ và linh động hơn.
Bài viết dưới đây liệt kê ra 5 THAY ĐỔI LỚN có ở JAVA 8. Hãy cùng đọc nhé!
1. Phương thức forEach()
Cập nhật này đúng ra thì là quá chậm trễ so với .NET. Visual Basic hay C# đều đã có forEach từ lâu. Hãy quên đi những câu for xưa cũ để chuyển qua sử dụng ForEach
Phương thức này cũng được hỗ trợ tốt bởi Iterator (java.lang.Interable). Cùng xem xét ví dụ add tất cả các đối tượng i vào list như sau:
Bùm, với Java 8, chỉ đơn giản là:
// Easy for ence với forEach listDanhsachA.forEach(a -> listDanhSachB.add(a.getB()));
2. Java 8 Lambda
Nhắc tới Java 8 mà không nhắc tới Lambda qủa thật là một sự thiếu sót to lớn. Lambda giúp cho functional programming (lập trình hàm) trở nên đơn giản hơn nhiều.
Syntax: parameter -> expression body. Dấu mũi tên biểu thị cho reference (tham chiếu tới cái gì đó)
Java Lambda liệt kê thành 4 loại sau đây:
Ông nào muốn tìm hiểu sâu hơn về Lambda có thể tham khảo bài viết về Java 8 Lambda ở Kieblog
3. Stream API
Sự xuất hiện của Stream trong Java 8 như là sự cứu rỗi cho các đoạn source loằng ngoằng trong Java. Nay với Stream, tất cả chỉ gói gọn trong một dòng code.
Đối với Stream thì Kieblog đã có một bài viết tương đối chi tiết và đặc sắc (Tuốt tuồn tuột về Stream trong Java 8).
4. Method reference
So với các ngôn ngữ như Scala hay Ruby on Rail đã có từ lâu. Method Reference cũng chỉ mới xuất hiện trên Java 8, khá trễ nhưng có còn hơn không.
Từ sau khi được release trên bản Java 8, Method Reference giúp code dễ đọc hơn, đỡ rườm rà, một số trường hợp còn dễ hiểu hơn cả Lambda.
Sơ bộ có thể chia Method Reference thành 4 loại chính:
4.1 Reference tới phương thức static
Các refer này khá sử dụng, với syntax là ContainingClass::methodName.
Cùng xem xét ví dụ sau đây:
// Cách viết này sử dụng lambda kiểm tra i có tồn tại trong list không boolean isVisible = list.stream().anyMatch(i -> Item.isVisible(i));
Còn đây là cách sử dụng Java 8 method reference
// Chỉ đơn giản sử dụng ::, không cần care param, khá gọn boolean isVisible = list.stream().anyMatch(Item::isVisible);
4.2 Reference tới instance của method
Khi new lên một instance method. Syntax có hơi khác hơn chút xíu: containingInstance::methodName
// Các dùng tương tự Item item = new Item() boolean isVisible = list.stream().anyMatch(item::isVisible())
4.3 Reference tới Instance Method của Object các kiểu đặc biệt
Loại này có syntax: ContainingType::methodName. Trường hợp nếu sử dụng với String, Long, Integer, … đều sử dụng được tất cả các instance method
// Tính tổng các String item trong list không empty int count = list.stream().filter(String::isEmpty).count();
4.4 Reference tới Constructor
Loại này có ít bạn nhớ (sử dụng với từ khóa ::new), nhưng thực tế vẫn có thể reference tới constructor theo kiểu như sau:
// Tính tổng các String item trong list không empty Stream<Item> stream = list.stream().map(Item::new);
5. Optional <T>
Trước khi Java 8 xuất hiện, để handle các trường hợp xuất hiện Exception thường rất vất vả. Catch đủ thứ, lỗi nào có thể văng ra thì catch lỗi đó. Đôi khi là hoa cả mắt xem lỗi đó catch ở đâu.
Class Optional <T> xuất hiện, giúp handle các khả năng văng NPE (Null Pointer Exception).
Handle NPE với Optional rõ ràng dễ hơn hẳn, cho phép ta cấu hình một số việc cần làm khi gặp NPE, trường hợp không có, chỉ đơn giản là thực thi một đoạn code nào đó.
// Lấy ra một list, nếu list khác null thì trả về list // Nếu list null thì cần new ArrayList<> List<String> listA = doAnyThingToGetList(); List<String> listB = list != null ? list : new ArrayList<>();
Sau khi áp dụng Optional:
// Đối với Java 8 Optional - chỉ đơn giản là một dòng code List<String> listB = doAnyThingToGetList().orElseGet(() -> new ArrayList<>());
6. Tham khảo
- Java 8 – What’s new? – Lambda Oreilly
- Java 8 – New feature – Baeldung
- Java 8 – Lambda expression – Tutorial point
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Stream trong Java 8
- Các cải tiến của Java cho Switch statement từ Java 12
- Java 13 Switch và Text Blocks – ơn trời, thay đổi đây rồi
Xem thêm Việc làm java lương cao hấp dẫn trên TopDev