Was ist der beste Weg, um a Map<key,value>
in a umzuwandeln List<value>
? Durchlaufen Sie einfach alle Werte und fügen Sie sie in eine Liste ein, oder übersehen Sie etwas?
java
list
collections
map
Javaa
quelle
quelle
Antworten:
vorausgesetzt:
quelle
Collection
, dass die Besetzung von bisList
funktionieren würde.keySet()
und zurückgegebenen Sammlungenvalues()
sind Shim-Objekte, die eine Set- oder Collection-Ansicht der zugrunde liegenden Struktur enthalten (keySet()
gibt ein Set zurück, um keine Dupes hervorzuheben). Dennvalues()
das zurückgegebene Objekt kann ein seinList
, wird es aber oft nicht sein. Wenn Sie, wie Sie sagen, eine echte Liste erstellen, wird der Link unterbrochen, sodass Sie nicht mehr von der ursprünglichen Karte abhängig sind. Manchmal benötigen Sie jedoch nur eine Liste, da für eine API eine erforderlich ist.Das Problem hierbei ist, dass
Map
zwei Werte (ein Schlüssel und ein Wert) vorhanden sind, während aList
nur einen Wert (ein Element) hat.Daher ist das Beste, was getan werden kann, entweder einen
List
der Schlüssel oder die Werte zu erhalten. (Es sei denn, wir erstellen einen Wrapper, um das Schlüssel / Wert-Paar festzuhalten.)Angenommen, wir haben eine
Map
:Die Schlüssel als
List
können erhalten werden, indemArrayList
aus einemSet
von derMap.keySet
Methode zurückgegebenen Schlüssel ein neuer erstellt wird:Während die Werte als erhalten werden
List
können, erstellen Sie eine neueArrayList
aus einerCollection
von derMap.values
Methode zurückgegebenen:Das Ergebnis des Erhaltens der
List
Schlüssel:Das Ergebnis des Erhaltens der
List
Werte:quelle
HashMap
und ähnliche nicht sortierteMap
Implementierungen effektiv zufällig ist.Verwenden der Java 8 Streams-API.
quelle
map.entrySet()
bietet Ihnen eine Sammlung vonMap.Entry
Objekten, die sowohl Schlüssel als auch Wert enthalten. Sie können dies dann in ein beliebiges Sammlungsobjekt umwandeln, znew ArrayList(map.entrySet())
.quelle
eine Liste von was?
Angenommen, es
map
ist Ihre Instanz vonMap
map.values()
gibt ein zurück,Collection
das alle Werte der Karte enthält.map.keySet()
gibt ein zurück,Set
das alle Schlüssel der Karte enthält.quelle
Ich denke , Sie wollen die Werte in den enthaltenen umwandeln
Map
zu einlist
? Am einfachsten ist es, dievalues()
Methode derMap
Schnittstelle aufzurufen . Dies gibt dieCollection
Wertobjekte zurück, die in derMap
. .Beachten Sie, dass dies
Collection
vomMap
Objekt unterstützt wird und alle Änderungen amMap
Objekt hier berücksichtigt werden. Wenn Sie also eine separate Kopie wünschen, die nicht an IhrMap
Objekt gebunden ist , erstellen Sie einfach ein neuesList
Objekt,ArrayList
indem Sie den folgenden Wert übergebenCollection
.quelle
Sie können es so machen
quelle
Wenn Sie sicherstellen möchten, dass die Werte in der Resultierenden
List<Value>
in der Schlüsselreihenfolge der Eingabe sindMap<Key, Value>
, müssen Sie "über" gehen.SortedMap
irgendwie .Beginnen Sie entweder mit einer konkreten
SortedMap
Implementierung (z. B.TreeMap
) oder fügen Sie Ihre EingabeMap
in eine ein,SortedMap
bevor Sie diese in konvertierenList
. z.B:Andernfalls erhalten Sie die native Reihenfolge, die die
Map
Implementierung bietet. Dies kann häufig etwas anderes sein als die natürliche Schlüsselreihenfolge (TryHashtable
orConcurrentHashMap
, für Abwechslung).quelle
Wir können sowohl Schlüssel- als auch Wertepaare in der Liste haben. Sie können auch Schlüssel und Wert mit Map.Entry erhalten, indem Sie über die Liste iterieren.
quelle
quelle
quelle
Hier ist die generische Methode zum Abrufen von Werten aus der Karte.
quelle
quelle