Immutable Collection cũng giống như Immutable Object, một khi đã được khởi tạo, chúng ta không thể chỉnh sửa gì trên Object hay Collection đó nữa. Từ Java 8 trở về trước, để khởi tạo một Immutable Collection như List, Set hay Map, chúng ta sẽ sử dụng các phương thức unmodifiableXXX() trong class java.util.Collections.
Ví dụ như mình tạo mới một đối tượng immutable của List như sau:
1 2 3 4 |
List<String> students = new ArrayList<String>(); students.add("Khanh"); students.add("Quan"); students = Collections.unmodifiableList(students); |
Nếu bây giờ, các bạn muốn thêm mới giá trị cho đối tượng students trên:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava.immutablecollection; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Application { public static void main(String[] args) { List<String> students = new ArrayList<String>(); students.add("Khanh"); students.add("Quan"); students = Collections.unmodifiableList(students); System.out.println(students); students.add("Thanh"); } } |
thì sẽ xảy ra lỗi này:
Từ Java 9, Java có thêm phương thức static of() trong các đối tượng List, Set, Map giúp chúng ta khởi tạo Immutable Collection dễ dàng hơn.
Ví dụ, bây giờ để khởi tạo một Immutable List, chúng ta chỉ cần viết code như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava.immutablecollection; import java.util.List; public class Application { public static void main(String[] args) { List<String> students = List.of("Khanh", "Quan"); System.out.println(students); } } |
Với Immutable Set thì vẫn tương tự như Immutable List:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava.immutablecollection; import java.util.Set; public class Application { public static void main(String[] args) { Set<String> students = Set.of("Khanh", "Quan"); System.out.println(students); } } |
Với Immutable Map thì có hơi khác một xí. Ví dụ từ Java 8 trở về trước thì chúng ta sẽ viết như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.huongdanjava.immutablecollection; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class Application { public static void main(String[] args) { Map<String, String> students = new HashMap<>(); students.put("A", "Khanh"); students.put("B", "Quan"); students = Collections.unmodifiableMap(students); System.out.println(students); } } |
Nhưng với Java 9 thì chúng ta có thể viết gọn lại như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava.immutablecollection; import java.util.Map; public class Application { public static void main(String[] args) { Map<String, String> students = Map.of("A", "Khanh", "B", "Quan"); System.out.println(students); } } |
Như các bạn thấy với Immutable Map thì chúng ta sẽ truyền vào phương thức static of() key và value của Map theo thứ tự (key1, value1, key2, value2, …).
Kết quả: