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.ofmetode statis untuk melakukan apa yang Anda inginkan: Buat Instantiate Mapmenggunakan 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.ofmenciptakan 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.Entryantarmuka. 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.Entryantarmuka 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.ofyang 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 Mapdari 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 EnumMapbawah.