Comment convertir une carte en liste en Java ?
-
06-07-2019 - |
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 ?
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 unCollection
contenant toutes les valeurs de la carte. -
map.keySet()
renverra unSet
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());
}