Question

Quelle est la meilleure façon de convertir un Map<key,value> à un List<value>?Parcourez simplement toutes les valeurs et insérez-les dans une liste ou est-ce que j'oublie quelque chose ?

Était-ce utile?

La solution

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

en supposant:

Map<Key,Value> map;

Autres conseils

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 l’on puisse faire est d’obtenir un List des clés ou des valeurs.(Sauf si nous créons 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 comme List peut être obtenu en créant un nouveau ArrayList de Set renvoyé 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 un nouveau ArrayList de Collection renvoyé par le Map.values méthode:

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

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

Apple
Another
Hello

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

3.14
Element
World

Utilisation de l'API Java 8 Streams.

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

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

une liste de quoi?

En supposant que map est votre instance de Map

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

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

Notez que ceci <=> est sauvegardé par l'objet <=> et que toute modification apportée à l'objet <=> sera reflétée ici. Donc, si vous voulez une copie séparée non liée à votre <=> objet, créez simplement un nouvel <=> objet comme un <=> transmettant la valeur <=> comme ci-dessous.

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

Vous pouvez le faire comme ça

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

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

démarrez avec une implémentation TreeMap concrète (telle que Map) ou insérez votre entrée List dans un Hashtable avant de la convertir en ConcurrentHashMap. 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 la <=> mise en œuvre, qui peut souvent être différent de l'ordre des clés naturelles (essayez <=> ou <=>, pour varier).

    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 itérant sur la liste.

// 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());    
}
"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());
 } "

Voici la méthode générique pour obtenir les 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;
}
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());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top