Une autre question à propos de HashMap <> en Java:
J'ai le suivant
Map<String, Set<Integer>> myWordDict = new HashMap<String, Set<Integer>>();
Après avoir stocké des données dans la variable myWordDict
, je souhaite effectuer une itération dans HashMapValues et ajouter chaque valeur à une nouvelle variable Set?
Lorsque j'essaie de faire Set<Integer> newVariable = myWordDict.entrySet()
, il semble que le type de données soit incompatible.
Donc ma question est essentiellement:
comment convertir les valeurs HashMap ou entrySet () en Set?
Merci
Votre déclaration devrait être comme ci-dessous. Il convertira vos valeurs de carte en Collection
Collection<Set<Integer>> newVariable = myWordDict.values();
Essayer:
Set<Integer> newVariable = mywordDict.keySet();
ou
Set<Integer> newVariable = new HashSet<Integer>(myWordDict.values());
public Set<Map.Entry<K,V>> entrySet()
Renvoie une vue d'ensemble des mappages contenus dans cette carte. L'ensemble est sauvegardé par la carte. Les modifications apportées à la carte sont donc reflétées dans l'ensemble, et inversement.
Si vous voulez parcourir la carte de hachage myWordDict
, alors juste
for(Map.Entry<String, Set<Integer>> entry : myWordDict.entrySet())
{
Set<Integer> newVariable = entry.getValue();
}
Liens connexes
Si vous avez besoin de toutes les valeurs en tant que Set
de Integers
et non en tant que Set
de Set
, vous pouvez faire quelque chose comme ceci
Set<Integer> newVariable = new HashSet<Integer>();
for (Set<Integer> set : myWordDict.values()) {
newVariable.addAll(set);
}
Ou si vous les voulez en tant que Set
de Set
, vous devez faire quelque chose comme ceci
Set<Set<Integer>> newVariable = new HashSet<Set<Integer>>();
newVariable.addAll(myWordDict.values());
utilisez myWordDict.values()
, pas myWordDict.entrySet()
. values est un ensemble de values
de la carte, alors que entrySet
est un ensemble de ses mappages (il s'agit d'un ensemble d'objets Java.util.map.Entry, chacun décrivant une clé et une valeur).
Map<Integer,String> map1 = new HashMap<Integer,String>();
map1.put(1, "Rakesh");
map1.put(2, "Amal");
map1.put(3, "Nithish");
Set<Entry<Integer,String>> set1 = map1.entrySet();
En supposant que vous souhaitiez ajouter toutes les valeurs des ensembles de la carte, votre approche consiste à utiliser addAll method:
Set<Integer> newVariable = new HashSet<Integer>();
for (Set<Integer> set : myWordDict.values()) {
newVariable.addAll(set);
}
flatMap vous aidera à:
myWordDict.values().stream().flatMap(Set::stream).collect(Collectors.toSet());
Alors, je suis venu avec un itérateur pour parcourir la valeur Set
J'ai cette structure de données
Map<String, Set<Integer>> myWordDict = new HashMap<String, Set<Integer>>();
J'ai crée
Iterator mapIterator = myWordDict.entrySet().iterator();
Ensuite, utilisez simplement une boucle while () pour ajouter une valeur individuelle à une nouvelle variable Set. Je ne suis pas sûr que ce soit le moyen le plus efficace, mais cela répond à mes besoins. »