web-dev-qa-db-fra.com

Comment convertir une carte en liste en Java?

Quel est le meilleur moyen de convertir un Map<key,value> en un List<value>? Il suffit de parcourir toutes les valeurs et de les insérer dans une liste ou est-ce que je néglige quelque chose?

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

en supposant:

Map<Key,Value> map;
1237
cletus

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

Par conséquent, le mieux que vous puissiez faire est d’obtenir List des clés ou des valeurs. (Sauf si nous fabriquons 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 peuvent être obtenues en créant une nouvelle ArrayList à partir de Set retourné par la méthode Map.keySet :

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

Alors que les valeurs en tant que List peuvent être obtenues en créant un nouveau ArrayList à partir d'un Collection renvoyé par le Map.values méthode:

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

Résultat de l'obtention du List de clés:

 Apple 
 Encore 
 Bonjour 

Résultat de l'obtention de la List des valeurs:

 3.14 
 Élément 
 Monde 
129
coobird

Utilisation de l'API Java 8 Streams.

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

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

22
java dude

une liste de quoi?

En supposant que map soit 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.
22
Diego Amicabile

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

Notez que cette Collection est soutenue par l'objet Map et toute modification apportée à l'objet Map sera reflétée ici. Donc, si vous voulez une copie séparée non liée à votre objet Map, créez simplement un nouvel objet List comme un ArrayList en passant la valeur Collection comme ci-dessous.

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

Tu peux le faire comme ça

List<Value> list = new ArrayList<Value>(map.values());
6
user3752441
    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);

nous pouvons avoir à la fois la paire clé et valeur dans la liste. Nous pouvons également obtenir la clé et la valeur en utilisant Map.Entry en parcourant la liste.

4
user11

Si vous voulez vous assurer que les valeurs dans le résultat List<Value> se trouvent dans l'ordre de saisie de l'entrée Map<Key, Value>, vous devez "passer par" SortedMap d'une manière ou d'une autre.

Soit début avec une implémentation SortedMap concrète (telle que TreeMap) ou insérez votre entrée Map dans un SortedMap avant de la convertir en List. par exemple.:

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

Sinon, vous obtiendrez tout l'ordre natif fourni par l'implémentation Map, qui peut souvent être autre chose que l'ordre naturel des clés (Try Hashtable ou ConcurrentHashMap, pour plus de variété).

4
M0les
// 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());    
}
3
saurabhgoyal795

Voici la méthode générique pour obtenir des valeurs de la carte.

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;
}
0
Hiral Pancholi
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());
}
0
Hakan Anlamaz
"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());
 } "
0
siva prasad