tl; dr
Sử dụng Map.of…
các phương thức trong Java 9 trở lên.
Map< String , String > animalSounds =
Map.of(
"dog" , "bark" , // key , value
"cat" , "meow" , // key , value
"bird" , "chirp" // key , value
)
;
Map.of
Java 9 đã thêm một loạt các Map.of
phương thức tĩnh để làm những gì bạn muốn: Khởi tạo một bất biến Map
bằng cách sử dụng cú pháp theo nghĩa đen .
Bản đồ (một bộ sưu tập các mục) là bất biến, vì vậy bạn không thể thêm hoặc xóa các mục sau khi khởi tạo. Ngoài ra, khóa và giá trị của mỗi mục là bất biến, không thể thay đổi. Xem Javadoc để biết các quy tắc khác, chẳng hạn như không cho phép NULL, không cho phép các khóa trùng lặp và thứ tự lặp của ánh xạ là tùy ý.
Chúng ta hãy xem xét các phương pháp này, sử dụng một số dữ liệu mẫu cho bản đồ ngày trong tuần cho một người mà chúng ta mong đợi sẽ làm việc vào ngày đó.
Person alice = new Person( "Alice" );
Person bob = new Person( "Bob" );
Person carol = new Person( "Carol" );
Map.of()
Map.of
tạo ra một sản phẩm nào Map
. Không thể thay đổi, vì vậy bạn không thể thêm các mục. Dưới đây là một ví dụ về bản đồ như vậy, trống rỗng không có mục.
Map < DayOfWeek, Person > dailyWorkerEmpty = Map.of();
DailyWorkerEmpty.toString (): {}
Map.of( … )
Map.of( k , v , k , v , …)
là một số phương thức lấy 1 đến 10 cặp khóa-giá trị. Dưới đây là một ví dụ về hai mục.
Map < DayOfWeek, Person > weekendWorker =
Map.of(
DayOfWeek.SATURDAY , alice , // key , value
DayOfWeek.SUNDAY , bob // key , value
)
;
cuối tuầnWorker.toString (): {SUNDAY = Person {name = 'Bob'}, SATURDAY = Person {name = 'Alice'}}
Map.ofEntries( … )
Map.ofEntries( Map.Entry , … )
mất bất kỳ số lượng đối tượng thực hiện Map.Entry
giao diện. Java gói hai lớp thực hiện giao diện đó, một lớp có thể thay đổi, lớp kia không thay đổi: AbstractMap.SimpleEntry
, AbstractMap.SimpleImmutableEntry
. Nhưng chúng ta không cần chỉ định một lớp cụ thể. Chúng ta chỉ cần gọi Map.entry( k , v )
phương thức, truyền khóa và giá trị của chúng ta và chúng ta lấy lại một đối tượng của một Map.Entry
giao diện triển khai lớp nào đó .
Map < DayOfWeek, Person > weekdayWorker = Map.ofEntries(
Map.entry( DayOfWeek.MONDAY , alice ) , // Call to `Map.entry` method returns an object implementing `Map.Entry`.
Map.entry( DayOfWeek.TUESDAY , bob ) ,
Map.entry( DayOfWeek.WEDNESDAY , bob ) ,
Map.entry( DayOfWeek.THURSDAY , carol ) ,
Map.entry( DayOfWeek.FRIDAY , carol )
);
weekdayWorker.toString (): {WEDNESDAY = Person {name = 'Bob'}, TUESDAY = Person {name = 'Bob'}, THURSDAY = Person {name = 'Carol'}, FRIDAY = Person {name = 'Carol'} , MONDAY = Người {name = 'Alice'}}
Map.copyOf
Java 10 đã thêm phương thức Map.copyOf
. Vượt qua một bản đồ hiện có, lấy lại một bản sao bất biến của bản đồ đó.
Ghi chú
Chú ý rằng thứ tự iterator của bản đồ được sản xuất thông qua Map.of
là không đảm bảo. Các mục có một thứ tự tùy ý. Không viết mã dựa trên đơn hàng đã xem, vì tài liệu cảnh báo đơn hàng có thể thay đổi.
Lưu ý rằng tất cả các Map.of…
phương pháp trả về một Map
của một lớp học không xác định . Lớp cụ thể bên dưới thậm chí có thể thay đổi từ một phiên bản Java sang một phiên bản khác. Tính ẩn danh này cho phép Java chọn từ các triển khai khác nhau, bất cứ điều gì tối ưu phù hợp với dữ liệu cụ thể của bạn. Ví dụ: nếu các khóa của bạn đến từ enum , Java có thể sử dụng khóa EnumMap
bên dưới.