Wie konvertiert man am besten eine Map<key,value>
zu einer List<value>
? Einfach alle Werte durchlaufen und in eine Liste einfügen oder übersehe ich etwas?
Antworten
Zu viele Anzeigen?Ich vermute, Sie wollen die Werte in der Datei Map
zu einer list
? Am einfachsten ist der Aufruf der values()
Methode der Map
Schnittstelle. Dies gibt die Collection
von Wertobjekten, die in der Map
.
Beachten Sie, dass diese Collection
wird unterstützt von der Map
Objekt und alle Änderungen an der Map
Objekt wird hier reflektiert. Wenn Sie also eine separate Kopie wünschen, die nicht an Ihr Map
Objekt, erstellen Sie einfach ein neues List
Objekt wie ein ArrayList
Übergabe des Wertes Collection
wie unten.
ArrayList<String> list = new ArrayList<String>(map.values());
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);
Wir können sowohl Schlüssel als auch Wertpaare in der Liste haben und können auch Schlüssel und Wert mit Map.Entry durch Iteration über die Liste erhalten.
Wenn Sie sicherstellen wollen, dass die Werte in der resultierenden List<Value>
sind in der Schlüsselreihenfolge der Eingabe Map<Key, Value>
müssen Sie "über" gehen. SortedMap
irgendwie.
Entweder Start mit einem konkreten SortedMap
Implementierung (wie z.B. TreeMap
) oder geben Sie Ihre Eingabe ein Map
in eine SortedMap
vor der Konvertierung in List
. z.B.:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
Andernfalls erhalten Sie die native Bestellung der Map
Implementierung zur Verfügung stellt, was oft etwas anderes sein kann als die natürliche Schlüsselreihenfolge (Versuchen Sie Hashtable
o ConcurrentHashMap
, zur Abwechslung).
1 Stimmen
Ich denke, es ist kein gutes Modell, wenn man eine Karte in eine Liste umwandeln muss. Man sollte den Code so schreiben, dass diese Situation nicht eintritt.