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?
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?
Jawaban:
List<Value> list = new ArrayList<Value>(map.values());
asumsi:
Map<Key,Value> map;
Collection
ke List
akan bekerja.
keySet()
dan values()
umumnya benda shim yang memberikan tampilan Set atau Koleksi struktur yang mendasarinya ( keySet()
mengembalikan Set untuk menekankan tidak ada dupes). Sebab values()
, objek yang dikembalikan mungkin a List
, 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 yang List
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
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
Kunci sebagai a List
dapat diperoleh dengan membuat yang baru ArrayList
dari yang Set
dikembalikan oleh Map.keySet
metode:
List<String> list = new ArrayList<String>(m.keySet());
Sementara nilai-nilai sebagai List
dapat diperoleh, membuat yang baru ArrayList
dari yang Collection
dikembalikan oleh Map.values
metode:
List<String> list = new ArrayList<String>(m.values());
Hasil mendapatkan List
kunci:
apel Lain Halo
Hasil mendapatkan List
nilai:
3.14 Elemen Dunia
HashMap
dan Map
implementasi serupa yang tidak diurutkan akan secara acak efektif.
Menggunakan Java 8 Streams API.
List<Value> values = map.values().stream().collect(Collectors.toList());
daftar apa?
Dengan asumsi map
adalah contoh dari AndaMap
map.values()
akan mengembalikan yang Collection
berisi semua nilai peta.map.keySet()
akan mengembalikan yang Set
berisi semua kunci peta.Saya kira Anda ingin mengonversi nilai yang terkandung dalam Map
ke list
? Cara termudah adalah memanggil values()
metode Map
antarmuka. Ini akan mengembalikan Collection
objek nilai yang terkandung dalam Map
.
Perhatikan bahwa ini Collection
didukung oleh Map
objek dan setiap perubahan pada Map
objek akan tercermin di sini. Jadi jika Anda ingin salinan terpisah tidak terikat ke Map
objek Anda , cukup buat List
objek baru seperti ArrayList
melewatkan nilai Collection
seperti di bawah ini.
ArrayList<String> list = new ArrayList<String>(map.values());
Anda bisa melakukannya seperti ini
List<Value> list = new ArrayList<Value>(map.values());
Jika Anda ingin memastikan nilai-nilai dalam resultan List<Value>
berada dalam urutan kunci input Map<Key, Value>
, Anda harus "pergi melalui"SortedMap
entah bagaimana.
Entah mulai dengan beton SortedMap
implementasi (Seperti TreeMap
) atau masukkan input Anda Map
ke dalam SortedMap
sebelum mengkonversi itu untuk List
. misalnya:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
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 (Coba Hashtable
atau ConcurrentHashMap
, untuk variasi).
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
kita bisa memiliki pasangan kunci dan nilai dalam daftar. Juga bisa mendapatkan kunci dan nilai menggunakan Peta. Coba dengan mengulang daftar.
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
Inilah metode generik untuk mendapatkan nilai dari peta.
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
return new ArrayList<String>((Collection<? extends String>) map.values());
}