Guava memberi kami metode pabrik yang bagus untuk jenis Java, seperti Maps.newHashMap()
.
Tetapi apakah ada juga pembuat untuk java Maps?
HashMap<String,Integer> m = Maps.BuildHashMap.
put("a",1).
put("b",2).
build();
java
collections
guava
Elazar Leibovich
sumber
sumber
Jawaban:
Karena
Map
antarmuka Java 9 berisi:Map.of(k1,v1, k2,v2, ..)
Map.ofEntries(Map.entry(k1,v1), Map.entry(k2,v2), ..)
.Batasan dari metode pabrik tersebut adalah:
null
s sebagai kunci dan / atau nilai (jika Anda perlu menyimpan null, lihat jawaban lain)Jika kita membutuhkan peta yang dapat berubah (seperti HashMap) kita dapat menggunakan copy-konstruktornya dan membiarkannya menyalin konten peta yang dibuat melalui
Map.of(..)
sumber
null
nilai, yang bisa menjadi masalah bergantung pada kasus penggunaan.Map.of(k1,v1, k2,v2, ...)
dapat digunakan dengan aman saat kita tidak memiliki banyak nilai. Untuk jumlah nilai yang lebih besarMap.ofEntries(Map.entry(k1,v1), Map.entry(k2,v2), ...)
memberi kami kode yang lebih mudah dibaca yang lebih sedikit rawan kesalahan (kecuali saya salah paham).Tidak ada hal seperti itu untuk HashMaps, tetapi Anda dapat membuat ImmutableMap dengan pembuat:
Dan jika Anda membutuhkan peta yang bisa berubah, Anda bisa memasukkannya ke konstruktor HashMap.
sumber
ImmutableMap
tidak mendukungnull
nilai-nilai. Jadi, ada batasan dari pendekatan ini: Anda tidak dapat menetapkan nilai diHashMap
tonull
.new HashMap
konstruktor Java daripadaMaps.newHashMap
metode statis ?Bukan pembuatnya, tapi menggunakan penginisialisasi:
sumber
map instanceof HashMap
salah? Sepertinya ide yang tidak terlalu bagus.map.getClass()==HashMap.class
akan mengembalikan false. Tapi itu tes bodoh.HashMap.class.isInstance(map)
harus lebih disukai, dan itu akan menjadi kenyataan.Ini mirip dengan jawaban yang diterima, tetapi sedikit lebih bersih, menurut saya:
Ada beberapa variasi dari metode di atas, dan metode ini bagus untuk membuat peta yang statis, tidak berubah, dan tidak berubah.
sumber
Ini yang sangat sederhana ...
kemudian
Lihat https://gist.github.com/culmat/a3bcc646fa4401641ac6eb01f3719065
sumber
Pembuat peta sederhana itu mudah untuk ditulis:
sumber
Kamu bisa memakai:
Ini tidak berkelas dan mudah dibaca, tetapi berhasil.
sumber
Map<String, Integer> map = ImmutableMap.of("a", 1, "b", 2);
lebih baik?HashMap
bisa berubah; tidak perlu seorang pembangun.sumber
ImmutableSet
. Jika Anda benar-benar ingin ini bisa berubah, Anda bisa menginisialisasinya di konstruktor atau blok penginisialisasi instance atau blok penginisialisasi statis jika itu bidang statis.ImmutableMap
sana dengan jelas.{{init();}}
(bukan di konstruktor, karena konstruktor lain mungkin melupakannya). Dan itu bagus karena itu semacam aksi atom. Jika peta mudah berubah, kemudian menginisialisasi dengan pembangun memastikan peta itu selalu baiknull
atau dalam keadaan akhir, tidak pernah terisi setengah.Anda dapat menggunakan API yang lancar di Koleksi Eclipse :
Berikut adalah blog dengan lebih detail dan contoh.
Catatan: Saya seorang pelaku untuk Koleksi Eclipse.
sumber
Saya memiliki persyaratan serupa beberapa waktu lalu. Ini tidak ada hubungannya dengan Guava tetapi Anda dapat melakukan hal seperti ini untuk dapat membangun dengan rapi
Map
menggunakan pembangun yang lancar.Buat kelas dasar yang memperluas Map.
Kemudian buat pembangun yang fasih dengan metode yang sesuai dengan kebutuhan Anda:
Anda kemudian dapat menerapkannya seperti ini:
sumber
Ini adalah sesuatu yang selalu saya inginkan, terutama saat menyiapkan perlengkapan tes. Akhirnya, saya memutuskan untuk menulis pembuat fasih sederhana milik saya yang dapat membangun implementasi Peta apa pun - https://gist.github.com/samshu/b471f5a2925fa9d9b718795d8bbdfe42#file-mapbuilder-java
sumber
Ini yang saya tulis
Anda menggunakannya seperti ini:
sumber
Menggunakan java 8:
Ini adalah pendekatan Java-9
Map.ofEntries(Map.entry(k1,v1), Map.entry(k2,v2), ...)
Cara Penggunaan:
sumber
Ada
ImmutableMap.builder()
di Jambu.sumber
Underscore-java dapat membuat peta hash.
sumber