Quelle est la meilleure façon de convertir un Map<key,value>en un List<value>? Il suffit d'itérer sur toutes les valeurs et de les insérer dans une liste ou est-ce que j'oublie quelque chose?
Quelle est la meilleure façon de convertir un Map<key,value>en un List<value>? Il suffit d'itérer sur toutes les valeurs et de les insérer dans une liste ou est-ce que j'oublie quelque chose?
Réponses:
List<Value> list = new ArrayList<Value>(map.values());en supposant:
Map<Key,Value> map;Collectionà Listfonctionnerait.
                    keySet()et values()sont généralement des objets shim qui donnent une vue Set ou Collection de la structure sous-jacente ( keySet()renvoie un Set pour ne mettre en évidence aucune dupe). Car values(), l'objet retourné peut être un List, mais ne le sera souvent pas. La création d'une véritable liste, comme vous le dites, rompt le lien, ce qui signifie que vous ne dépendez plus de la carte d'origine. Parfois cependant, vous n'avez besoin que d'une liste car certaines API en nécessitent une - renforçant la règle selon laquelle une bonne API ne doit nécessiter que les interfaces les plus abstraites avec
                    Le problème ici est qu'il Mapa deux valeurs (une clé et une valeur), tandis Listqu'un a une seule valeur (un élément).
Par conséquent, le mieux qui puisse être fait est d'obtenir une Listdes clés ou des valeurs. (Sauf si nous créons un wrapper pour conserver la paire clé / valeur).
Disons que nous avons 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 un Listpeuvent être obtenues en créant un nouveau à ArrayListpartir d'un Setretourné par la Map.keySetméthode:
List<String> list = new ArrayList<String>(m.keySet());Alors que les valeurs comme un Listpeuvent être obtenues en créant un nouveau à ArrayListpartir d'un Collectionretourné par la Map.valuesméthode:
List<String> list = new ArrayList<String>(m.values());Le résultat de l'obtention Listdes clés:
Pomme Un autre Bonjour
Le résultat de l'obtention Listdes valeurs:
3.14 Élément Monde
HashMapsimilaires non triées, Mapil sera effectivement aléatoire.
                    Utilisation de l'API Java 8 Streams.
List<Value> values = map.values().stream().collect(Collectors.toList());une liste de quoi?
En supposant que mapvotre instance deMap
map.values()renverra un Collectioncontenant toutes les valeurs de la carte.map.keySet()renverra un Setcontenant toutes les clés de la carte.Je suppose que vous voulez convertir les valeurs contenues dans le Mapun list? Le plus values()simple est d'appeler la méthode de l' Mapinterface. Cela renverra les Collectionobjets de valeur contenus dans le Map.
Notez que cela Collectionest soutenu par l' Mapobjet et toutes les modifications apportées à l' Mapobjet seront reflétées ici. Donc, si vous voulez une copie séparée non liée à votre Mapobjet, créez simplement un nouvel Listobjet comme un ArrayListpassage de la valeur Collectioncomme 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 la résultante List<Value>sont dans l'ordre des clés de l'entrée Map<Key, Value>, vous devez en SortedMapquelque sorte "passer par" .
Soit commencer avec un béton SortedMapmise en œuvre (telle que TreeMap) ou insérez votre entrée Mapen SortedMapavant de la convertir à 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 Mapfourni par l' implémentation, qui peut souvent être autre chose que l'ordre des clés naturelles (Try Hashtableou ConcurrentHashMap, 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 clé et la paire de valeurs dans la liste. Vous pouvez é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 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());
}