Quelle est la meilleure façon de convertir un Map<key,value>
en un List<value>
? Il suffit d'itérer sur toutes les valeurs et de les insérer dans une liste ou est-ce que j'oublie quelque chose?
java
list
collections
map
Javaa
la source
la source
Réponses:
en supposant:
la source
Collection
àList
fonctionnerait.keySet()
etvalues()
sont généralement des objets shim qui donnent une vue Set ou Collection de la structure sous-jacente (keySet()
renvoie un Set pour ne mettre en évidence aucune dupe). Carvalues()
, l'objet retourné peut être unList
, mais ne le sera souvent pas. La création d'une véritable liste, comme vous le dites, rompt le lien, ce qui signifie que vous ne dépendez plus de la carte d'origine. Parfois cependant, vous n'avez besoin que d'une liste car certaines API en nécessitent une - renforçant la règle selon laquelle une bonne API ne doit nécessiter que les interfaces les plus abstraites avecLe problème ici est qu'il
Map
a deux valeurs (une clé et une valeur), tandisList
qu'un a une seule valeur (un élément).Par conséquent, le mieux qui puisse être fait est d'obtenir une
List
des clés ou des valeurs. (Sauf si nous créons un wrapper pour conserver la paire clé / valeur).Disons que nous avons
Map
:Les clés comme un
List
peuvent être obtenues en créant un nouveau àArrayList
partir d'unSet
retourné par laMap.keySet
méthode:Alors que les valeurs comme un
List
peuvent être obtenues en créant un nouveau àArrayList
partir d'unCollection
retourné par laMap.values
méthode:Le résultat de l'obtention
List
des clés:Le résultat de l'obtention
List
des valeurs:la source
HashMap
similaires non triées,Map
il sera effectivement aléatoire.Utilisation de l'API Java 8 Streams.
la source
map.entrySet()
vous donne une collection d'Map.Entry
objets contenant à la fois la clé et la valeur. vous pouvez ensuite le transformer en n'importe quel objet de collection que vous aimez, commenew ArrayList(map.entrySet())
;la source
une liste de quoi?
En supposant que
map
votre instance deMap
map.values()
renverra unCollection
contenant toutes les valeurs de la carte.map.keySet()
renverra unSet
contenant toutes les clés de la carte.la source
Je suppose que vous voulez convertir les valeurs contenues dans le
Map
unlist
? Le plusvalues()
simple est d'appeler la méthode de l'Map
interface. Cela renverra lesCollection
objets de valeur contenus dans leMap
.Notez que cela
Collection
est soutenu par l'Map
objet et toutes les modifications apportées à l'Map
objet seront reflétées ici. Donc, si vous voulez une copie séparée non liée à votreMap
objet, créez simplement un nouvelList
objet comme unArrayList
passage de la valeurCollection
comme ci-dessous.la source
Vous pouvez le faire comme ça
la source
Si vous voulez vous assurer que les valeurs dans la résultante
List<Value>
sont dans l'ordre des clés de l'entréeMap<Key, Value>
, vous devez enSortedMap
quelque sorte "passer par" .Soit commencer avec un béton
SortedMap
mise en œuvre (telle queTreeMap
) ou insérez votre entréeMap
enSortedMap
avant de la convertir àList
. par exemple:Sinon, vous obtiendrez tout l'ordre natif
Map
fourni par l' implémentation, qui peut souvent être autre chose que l'ordre des clés naturelles (TryHashtable
ouConcurrentHashMap
, pour varier).la source
nous pouvons avoir à la fois la clé et la paire de valeurs dans la liste. Vous pouvez également obtenir la clé et la valeur en utilisant Map.Entry en itérant sur la liste.
la source
la source
la source
Voici la méthode générique pour obtenir des valeurs de la carte.
la source
la source