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;
Collectionke Listakan 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 Mapmemiliki dua nilai (kunci dan nilai), sedangkan yang Listhanya memiliki satu nilai (elemen).
Oleh karena itu, yang terbaik yang bisa dilakukan adalah mendapatkan salah satu Listkunci 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 Listdapat diperoleh dengan membuat yang baru ArrayListdari yang Setdikembalikan oleh Map.keySetmetode:
List<String> list = new ArrayList<String>(m.keySet());
Sementara nilai-nilai sebagai Listdapat diperoleh, membuat yang baru ArrayListdari yang Collectiondikembalikan oleh Map.valuesmetode:
List<String> list = new ArrayList<String>(m.values());
Hasil mendapatkan Listkunci:
apel Lain Halo
Hasil mendapatkan Listnilai:
3.14 Elemen Dunia
HashMapdan Mapimplementasi 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 mapadalah contoh dari AndaMap
map.values()akan mengembalikan yang Collectionberisi semua nilai peta.map.keySet()akan mengembalikan yang Setberisi semua kunci peta.Saya kira Anda ingin mengonversi nilai yang terkandung dalam Mapke list? Cara termudah adalah memanggil values()metode Mapantarmuka. Ini akan mengembalikan Collectionobjek nilai yang terkandung dalam Map.
Perhatikan bahwa ini Collectiondidukung oleh Mapobjek dan setiap perubahan pada Mapobjek akan tercermin di sini. Jadi jika Anda ingin salinan terpisah tidak terikat ke Mapobjek Anda , cukup buat Listobjek baru seperti ArrayListmelewatkan nilai Collectionseperti 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 SortedMapimplementasi (Seperti TreeMap) atau masukkan input Anda Mapke dalam SortedMapsebelum 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 Mapdisediakan oleh implementasi, yang sering kali bisa merupakan sesuatu selain dari pemesanan kunci alami (Coba Hashtableatau 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());
}