Vào quý I năm 2014, Java 8 được phát hành với nhiều ưu điểm mới. SmartJob xin giới thiệu những điểm mới mẻ này đến các bạn.
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
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
|

Lambda là một ký tự trong bảng chữ cái Hy Lạp
Như vậy, chúng ta đã thay thế cú pháp cũ
1
2
3
4
5
6
7
|
// 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
1
2
|
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
java,
Java 7,
Java 8,