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?
List<Value> list = new ArrayList<Value>(map.values());
en supposant:
Map<Key,Value> map;
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
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 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())
;
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.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());
Tu peux le faire comme ça
List<Value> list = new ArrayList<Value>(map.values());
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.
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é).
// 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());
}
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;
}
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());
}
"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());
} "