Saya ingin membuat item baru yang sama dengan Util.Map.Entry
yang akan berisi struktur key
, value
.
Masalahnya adalah saya tidak bisa instantiate Map.Entry
karena itu antarmuka.
Adakah yang tahu cara membuat objek kunci / nilai generik baru untuk Map.Entry?
java
dictionary
collections
key-value
Manusia laba-laba
sumber
sumber
Ada
public static class AbstractMap.SimpleEntry<K,V>
. Jangan biarkanAbstract
bagian dari nama menyesatkan Anda: itu sebenarnya tidak sebuahabstract
kelas (tapi top-levelAbstractMap
adalah).Fakta bahwa itu adalah
static
kelas bersarang berarti bahwa Anda TIDAK perlu menyertakanAbstractMap
instance untuk instantiate, jadi sesuatu seperti ini mengkompilasi dengan baik:Seperti disebutkan dalam jawaban lain, Guava juga memiliki
static
metode pabrik yang nyamanMaps.immutableEntry
yang dapat Anda gunakan.Kamu berkata:
Itu tidak sepenuhnya akurat. Alasan mengapa Anda tidak dapat membuat instantiate secara langsung (yaitu dengan
new
) adalah karena itu adalahinterface Map.Entry
.Peringatan dan tip
Seperti yang tercantum dalam dokumentasi,
AbstractMap.SimpleEntry
adalah@since 1.6
, jadi jika Anda terjebak ke 5.0, maka tidak tersedia untuk Anda.Untuk mencari kelas lain yang diketahui itu
implements Map.Entry
, Anda sebenarnya bisa langsung menuju ke javadoc. Dari versi Java 6Sayangnya versi 1.5 tidak mencantumkan kelas pelaksana yang diketahui yang dapat Anda gunakan, jadi Anda mungkin terjebak dengan penerapan kelas Anda sendiri.
sumber
AbstractMap.SimpleEntry
tidak publik sampai Java 6, seperti yang Anda lihat di dokumentasi.AbstractMap.SimpleEntry
. Saya kira Anda belajar sesuatu yang baru setiap hari!Mulai dari Java 9, ada metode utilitas baru yang memungkinkan untuk membuat entri yang tidak dapat diubah
Map#entry(Object, Object)
.Ini adalah contoh sederhana:
Karena tidak berubah, panggilan
setValue
akan melemparUnsupportedOperationException
. Keterbatasan lainnya adalah fakta bahwa itu tidak serializable dannull
karena kunci atau nilai dilarang, jika itu tidak dapat diterima untuk Anda, Anda harus menggunakanAbstractMap.SimpleImmutableEntry
atauAbstractMap.SimpleEntry
sebagai gantinya.NB: Jika kebutuhan Anda adalah untuk membuat secara langsung pasangan
Map
0 hingga 10 (kunci, nilai), Anda dapat menggunakan metode tipeMap.of(K key1, V value1, ...)
.sumber
Coba Maps.immutableEntry dari Guava
Ini memiliki keuntungan karena kompatibel dengan Java 5 (tidak seperti
AbstractMap.SimpleEntry
yang membutuhkan Java 6.)sumber
Contoh AbstractMap.SimpleEntry:
Memberi contoh:
Tambahkan baris:
Ambil baris:
Harus mencetak:
Ini bagus untuk menentukan tepi struktur grafik. Seperti yang ada di antara neuron di kepala Anda.
sumber
Anda sebenarnya bisa pergi dengan:
Map.Entry<String, String> en= Maps.immutableEntry(key, value);
sumber
Mengapa
Map.Entry
? Saya kira sesuatu seperti pasangan kunci-nilai cocok untuk kasus ini.Gunakan
java.util.AbstractMap.SimpleImmutableEntry
ataujava.util.AbstractMap.SimpleEntry
sumber
org.apache.commons.lang3.tuple.Pair
mengimplementasikanjava.util.Map.Entry
dan juga bisa digunakan secara mandiri.Juga seperti orang lain menyebutkan Guava
com.google.common.collect.Maps.immutableEntry(K, V)
melakukan trik.Saya lebih suka sintaksnya yang
Pair
lancarPair.of(L, R)
.sumber
ImmutablePair
?Saya mendefinisikan kelas Pair generik yang saya gunakan sepanjang waktu. Itu bagus. Sebagai bonus, dengan mendefinisikan metode pabrik statis (Pair.create) saya hanya perlu menulis argumen tipe setengah sering.
sumber
Pair
implementasi adalah hal yang buruk. SumberJika Anda menggunakan Clojure, Anda memiliki opsi lain:
sumber