Những điểm mới của Java 8 (phần 1: Lambda expression)

Bài viết được sự cho phép của smartjob.vn
Vào quý I năm 2014, Java 8 được phát hành với nhiều ưu điểm mới. Station D xin giới thiệu những điểm mới mẻ này đến các bạn.
Xem thêm việc làm Java lương cao trên Station D
Khởi tạo thực thể Nhân viên (Employee) có 3 thuộc tính là tên, tuổi và mức lương:
package com.smartJob.demo; import java.math.BigDecimal; public class Employee { // Tên của nhân viên. String name; // Tuổi. Integer age; // Lương của nhân viên. BigDecimal salary; public Employee() { } public Employee(String name, BigDecimal salary, Integer age) { super(); this.name = name; this.salary = salary; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public BigDecimal getSalary() { return salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } }
Mục tiêu của chúng ta là sắp xếp nhân viên theo 1 trong 3 tiêu chí: tên, tuổi hay mức lương. Với Java 7, dùng 2 class là java.util.Collections và java.util.Comparator để so sánh và sắp xếp:
package com.smartJob.demo; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Sorting { // Khởi tạo cấu trúc dữ liệu. private static List getEmployees() { List result = new ArrayList(); result.add(new Employee("VyDN", new BigDecimal("750000"), 29)); result.add(new Employee("AnhHT", new BigDecimal("800000"), 23)); result.add(new Employee("ConNV", new BigDecimal("10000000"), 22)); result.add(new Employee("KhanhND", new BigDecimal("17500000"), 26)); return result; } // Tiện ích hỗ trợ in kết quả ra màn hình. private static void printResult(List listEmployees) { for (Employee employee : listEmployees) { System.out.print("Họ tên: " + employee.getName() + ", "); System.out.print("Tuổi: " + employee.getAge() + ", "); System.out.println("Lương: " + employee.getSalary() + " VND"); } } public static void main(String[] args) { List listEmployees = getEmployees(); System.out.println("-------------------Trước khi sắp xếp-------------------"); printResult(listEmployees); // Sắp xếp theo tuổi của nhân viên. Collections.sort(listEmployees, new Comparator() { @Override public int compare(Employee e1, Employee e2) { return e1.getAge() - e2.getAge(); } }); System.out.println("--------------Sau khi sắp xếp theo tuổi-----------"); printResult(listEmployees); } } // Kết quả: //-------------------Trước khi sắp xếp------------------- //Họ tên: VyDN, Tuổi: 29, Lương: 750000 VND //Họ tên: AnhHT, Tuổi: 23, Lương: 800000 VND //Họ tên: ConNV, Tuổi: 22, Lương: 10000000 VND //Họ tên: KhanhND, Tuổi: 26, Lương: 17500000 VND //--------------Sau khi sắp xếp theo tuổi----------- //Họ tên: ConNV, Tuổi: 22, Lương: 10000000 VND //Họ tên: AnhHT, Tuổi: 23, Lương: 800000 VND //Họ tên: KhanhND, Tuổi: 26, Lương: 17500000 VND //Họ tên: VyDN, Tuổi: 29, Lương: 750000 VND
Với Java 8 lambda, cú pháp sẽ ngắn gọn hơn, gần với ngôn ngữ tự nhiên hơn
package com.smartJob.demo; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class LambdaSorting { // Khởi tạo cấu trúc dữ liệu. private static List getEmployees() { List result = new ArrayList(); result.add(new Employee("VyDN", new BigDecimal("750000"), 29)); result.add(new Employee("AnhHT", new BigDecimal("800000"), 23)); result.add(new Employee("ConNV", new BigDecimal("10000000"), 22)); result.add(new Employee("KhanhND", new BigDecimal("17500000"), 26)); return result; } // Tiện ích hỗ trợ in kết quả ra màn hình. private static void printResult(List listEmployees) { for (Employee employee : listEmployees) { System.out.print("Họ tên: " + employee.getName() + ", "); System.out.print("Tuổi: " + employee.getAge() + ", "); System.out.println("Lương: " + employee.getSalary() + " VND"); } } public static void main(String[] args) { List listEmployees = getEmployees(); System.out.println("-------------------Trước khi sắp xếp-------------------"); printResult(listEmployees); // Sắp xếp theo tuổi của nhân viên. Sử dụng cú pháp Java 8. listEmployees.sort((Employee e1, Employee e2) -> e1.getAge() - e2.getAge()); System.out.println("--------------Sau khi sắp xếp theo tuổi-----------"); listEmployees.forEach((employee) -> printResult(listEmployees)); } } // Kết quả: //-------------------Trước khi sắp xếp------------------- //Họ tên: VyDN, Tuổi: 29, Lương: 750000 VND //Họ tên: AnhHT, Tuổi: 23, Lương: 800000 VND //Họ tên: ConNV, Tuổi: 22, Lương: 10000000 VND //Họ tên: KhanhND, Tuổi: 26, Lương: 17500000 VND //--------------Sau khi sắp xếp theo tuổi----------- //Họ tên: ConNV, Tuổi: 22, Lương: 10000000 VND //Họ tên: AnhHT, Tuổi: 23, Lương: 800000 VND //Họ tên: KhanhND, Tuổi: 26, Lương: 17500000 VND //Họ tên: VyDN, Tuổi: 29, Lương: 750000 VND
Như vậy, chúng ta đã thay thế cú pháp cũ
// Sắp xếp theo tuổi của nhân viên. Collections.sort(listEmployees, new Comparator() { @Override public int compare(Employee e1, Employee e2) { return e1.getAge() - e2.getAge(); } });
bằng cú pháp mới Lambda
listEmployees.sort((Employee e1, Employee e2) -> e1.getAge() - e2.getAge()); listEmployees.forEach((employee) -> printResult(listEmployees));
SmartJob đã đóng gói project để bạn tải về chạy thử: Java8_sort . Clone/fork từ repository Github: https://github.com/SmartJobVN/java8
Đỗ Như Vý – developer tại SmartJob – Nguồn smartjob.vn
Có thể bạn quan tâm:
- 10x engineer – cắt giảm chi phí 10 lần
- Những điểm mới của Java 8 (phần 3: Streams API – tiếp)
- Những điểm mới của Java 8 (phần 5: Tham chiếu phương thức)
Xem thêm tuyển dụng CNTT hấp dẫn trên Station D