web-dev-qa-db-fra.com

Java: convertir les valeurs HashMap en Set <Integer>

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

7
TonyGW

Votre déclaration devrait être comme ci-dessous. Il convertira vos valeurs de carte en Collection

  Collection<Set<Integer>> newVariable = myWordDict.values();
9
Masudul

Essayer:

Set<Integer> newVariable = mywordDict.keySet();

ou

Set<Integer> newVariable = new HashSet<Integer>(myWordDict.values());
16
Kamlesh Arya

Que renvoie entrySet?

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  

5
Aniket Kulkarni

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());
2
SudoRahul

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();
1
Rakesh KR

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);
}
1
aga

flatMap vous aidera à:

myWordDict.values().stream().flatMap(Set::stream).collect(Collectors.toSet());
0
free斩

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. »

0
TonyGW