Apa cara terbaik untuk mengonversi a Map<key,value>
ke a List<value>
? Ulangi semua nilai dan masukkan dalam daftar atau apakah saya mengabaikan sesuatu?
java
list
collections
map
Javaa
sumber
sumber
Jawaban:
asumsi:
sumber
Collection
keList
akan bekerja.keySet()
danvalues()
umumnya benda shim yang memberikan tampilan Set atau Koleksi struktur yang mendasarinya (keySet()
mengembalikan Set untuk menekankan tidak ada dupes). Sebabvalues()
, objek yang dikembalikan mungkin aList
, tetapi sering kali tidak. Membuat Daftar asli, seperti yang Anda katakan, mematahkan tautan yang berarti Anda tidak lagi bergantung pada Peta asli. Namun terkadang, Anda hanya perlu Daftar karena beberapa API memerlukan satu - memperkuat aturan bahwa API yang baik harus hanya memerlukan antarmuka paling abstrak yang bisa lolos ...Masalahnya di sini adalah yang
Map
memiliki dua nilai (kunci dan nilai), sedangkan yangList
hanya memiliki satu nilai (elemen).Oleh karena itu, yang terbaik yang bisa dilakukan adalah mendapatkan salah satu
List
kunci atau nilai-nilai. (Kecuali jika kami membuat pembungkus untuk berpegangan pada pasangan kunci / nilai).Katakanlah kita punya
Map
:Kunci sebagai a
List
dapat diperoleh dengan membuat yang baruArrayList
dari yangSet
dikembalikan olehMap.keySet
metode:Sementara nilai-nilai sebagai
List
dapat diperoleh, membuat yang baruArrayList
dari yangCollection
dikembalikan olehMap.values
metode:Hasil mendapatkan
List
kunci:Hasil mendapatkan
List
nilai:sumber
HashMap
danMap
implementasi serupa yang tidak diurutkan akan secara acak efektif.Menggunakan Java 8 Streams API.
sumber
map.entrySet()
memberi Anda koleksiMap.Entry
objek yang berisi kunci dan nilai. Anda kemudian dapat mengubah ini menjadi objek koleksi yang Anda suka, sepertinew ArrayList(map.entrySet())
;sumber
daftar apa?
Dengan asumsi
map
adalah contoh dari AndaMap
map.values()
akan mengembalikan yangCollection
berisi semua nilai peta.map.keySet()
akan mengembalikan yangSet
berisi semua kunci peta.sumber
Saya kira Anda ingin mengonversi nilai yang terkandung dalam
Map
kelist
? Cara termudah adalah memanggilvalues()
metodeMap
antarmuka. Ini akan mengembalikanCollection
objek nilai yang terkandung dalamMap
.Perhatikan bahwa ini
Collection
didukung olehMap
objek dan setiap perubahan padaMap
objek akan tercermin di sini. Jadi jika Anda ingin salinan terpisah tidak terikat keMap
objek Anda , cukup buatList
objek baru sepertiArrayList
melewatkan nilaiCollection
seperti di bawah ini.sumber
Anda bisa melakukannya seperti ini
sumber
Jika Anda ingin memastikan nilai-nilai dalam resultan
List<Value>
berada dalam urutan kunci inputMap<Key, Value>
, Anda harus "pergi melalui"SortedMap
entah bagaimana.Entah mulai dengan beton
SortedMap
implementasi (SepertiTreeMap
) atau masukkan input AndaMap
ke dalamSortedMap
sebelum mengkonversi itu untukList
. misalnya:Kalau tidak, Anda akan mendapatkan pemesanan asli apa pun yang
Map
disediakan oleh implementasi, yang sering kali bisa merupakan sesuatu selain dari pemesanan kunci alami (CobaHashtable
atauConcurrentHashMap
, untuk variasi).sumber
kita bisa memiliki pasangan kunci dan nilai dalam daftar. Juga bisa mendapatkan kunci dan nilai menggunakan Peta. Coba dengan mengulang daftar.
sumber
sumber
sumber
Inilah metode generik untuk mendapatkan nilai dari peta.
sumber
sumber