tl; dr
Gunakan Map.of…
metode di Java 9 dan yang lebih baru.
Map< String , String > animalSounds =
Map.of(
"dog" , "bark" , // key , value
"cat" , "meow" , // key , value
"bird" , "chirp" // key , value
)
;
Map.of
Java 9 menambahkan serangkaian Map.of
metode statis untuk melakukan apa yang Anda inginkan: Buat Instantiate Map
menggunakan sintaks literal .
Peta (kumpulan entri) tidak dapat diubah, sehingga Anda tidak dapat menambah atau menghapus entri setelah membuat instance. Juga, kunci dan nilai setiap entri tidak berubah, tidak dapat diubah. Lihat Javadoc untuk aturan lain, seperti tidak ada NULL diizinkan, tidak ada kunci duplikat diizinkan, dan urutan iterasi pemetaan adalah arbitrer.
Mari kita lihat metode-metode ini, menggunakan beberapa sampel data untuk peta hari-minggu ke seseorang yang kita harapkan akan bekerja pada hari itu.
Person alice = new Person( "Alice" );
Person bob = new Person( "Bob" );
Person carol = new Person( "Carol" );
Map.of()
Map.of
menciptakan yang kosong Map
. Tidak dapat dimodifikasi, sehingga Anda tidak dapat menambahkan entri. Berikut adalah contoh peta seperti itu, kosong tanpa entri.
Map < DayOfWeek, Person > dailyWorkerEmpty = Map.of();
dailyWorkerEmpty.toString (): {}
Map.of( … )
Map.of( k , v , k , v , …)
ada beberapa metode yang mengambil 1 hingga 10 pasangan nilai kunci. Ini adalah contoh dari dua entri.
Map < DayOfWeek, Person > weekendWorker =
Map.of(
DayOfWeek.SATURDAY , alice , // key , value
DayOfWeek.SUNDAY , bob // key , value
)
;
weekendWorker.toString (): {SUNDAY = Orang {name = 'Bob'}, SATURDAY = Orang {name = 'Alice'}}
Map.ofEntries( … )
Map.ofEntries( Map.Entry , … )
mengambil sejumlah objek yang mengimplementasikan Map.Entry
antarmuka. Java bundel dua kelas mengimplementasikan antarmuka itu, satu bisa berubah, yang lainnya tidak berubah: AbstractMap.SimpleEntry
, AbstractMap.SimpleImmutableEntry
. Tetapi kita tidak perlu menentukan kelas konkret. Kita hanya perlu memanggil Map.entry( k , v )
metode, meneruskan kunci dan nilai kita, dan kita mendapatkan kembali objek dari beberapa Map.Entry
antarmuka implementasi kelas .
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 = Orang {name = 'Bob'}, SELASA = Orang {name = 'Bob'}, KAMIS = Orang {name = 'Carol'}, FRIDAY = Orang {nama = 'Carol'} , SENIN = Orang {name = 'Alice'}}
Map.copyOf
Java 10 menambahkan metode ini Map.copyOf
. Lewati peta yang ada, dapatkan kembali salinan peta itu yang tidak berubah.
Catatan
Perhatikan bahwa urutan iterator peta yang dihasilkan melalui Map.of
yang tidak dijamin. Entri memiliki perintah sewenang-wenang. Jangan menulis kode berdasarkan urutan yang terlihat, karena dokumentasi memperingatkan pesanan dapat berubah.
Perhatikan bahwa semua Map.of…
metode ini mengembalikan a Map
dari kelas yang tidak ditentukan . Kelas beton yang mendasari bahkan dapat bervariasi dari satu versi Java ke yang lain. Anonimitas ini memungkinkan Java untuk memilih dari berbagai implementasi, apa pun yang secara optimal sesuai dengan data khusus Anda. Misalnya, jika kunci Anda berasal dari enum , Java mungkin menggunakan EnumMap
bawah.