Question Comment convertir une carte en liste en Java?


Quelle est la meilleure façon de convertir un Map<key,value> à un List<value>? Juste itérer sur toutes les valeurs et les insérer dans une liste ou est-ce que je néglige quelque chose?


575
2018-06-22 11:45


origine


Réponses:


List<Value> list = new ArrayList<Value>(map.values());

en supposant:

Map<Key,Value> map;

1124
2018-06-22 11:48



Le problème ici est que Map a deux valeurs (une clé et une valeur), tandis qu'un List a seulement une valeur (un élément).

Par conséquent, le mieux que l'on puisse faire est d'obtenir List des clés ou des valeurs. (Sauf si nous faisons un wrapper pour conserver la paire clé / valeur).

Disons que nous avons un Map:

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

Les clés en tant que List peut être obtenu en créant une nouvelle ArrayList de Set retourné par le Map.keySet méthode:

List<String> list = new ArrayList<String>(m.keySet());

Alors que les valeurs en tant que List peut être obtenu en créant une nouvelle ArrayList de Collection retourné par le Map.values méthode:

List<String> list = new ArrayList<String>(m.values());

Le résultat de l'obtention du List des clés:

Pomme
Un autre
Bonjour

Le résultat de l'obtention du List des valeurs:

3,14
Élément
Monde

124
2018-06-22 11:51



Utilisation de l'API Java 8 Streams

List<Value> values = map.values().stream().collect(Collectors.toList());

23
2017-09-19 08:34



une liste de quoi?

En supposant map est votre instance de Map

  • map.values() retournera un Collection contenant toutes les valeurs de la carte.
  • map.keySet() retournera un Set contenant toutes les clés de la carte.

20
2018-06-22 11:49



map.entrySet() vous donne une collection de Map.Entry objets contenant à la fois la clé et la valeur. vous pouvez ensuite transformer cela en n'importe quel objet de collection que vous aimez, comme new ArrayList(map.entrySet());


18
2017-11-16 19:00



Je suppose que vous voulez convertir les valeurs contenues dans le Map à un list? Le plus simple est d'appeler le values() méthode de Map interface. Cela retournera le Collection des objets de valeur contenus dans le Map.

Notez que ceci Collection est soutenu par le Map objet et tous les changements à la Map objet reflétera ici. Donc, si vous voulez une copie séparée non liée à votre Map objet, créez simplement un nouveau List objet comme un ArrayList passer la valeur Collection comme ci-dessous.

ArrayList<String> list = new ArrayList<String>(map.values());

12
2018-06-22 11:53



Tu peux le faire comme ça

List<Value> list = new ArrayList<Value>(map.values());

6
2017-11-23 00:17



Si vous voulez assurer les valeurs dans le résultat List<Value> sont dans l'ordre de la clé de l'entrée Map<Key, Value>, vous devez "passer par" SortedMap en quelque sorte.

Non plus début avec un béton SortedMap mise en œuvre TreeMap) ou insérez votre entrée Map dans une SortedMap avant de convertir cela en List. par exemple.:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

Sinon, vous obtiendrez n'importe quel ordre natif de la Map la mise en œuvre fournit, ce qui peut souvent être autre chose que la commande de clé naturelle (Essayez Hashtable ou ConcurrentHashMap, pour la variété).


4
2018-03-18 02:27