2017-09-29 2 views
0

J'ai deux Situé à l'intérieur d'une hashmap que je veux combiner là des valeurs dans un autre jeu:Comment puis-je combiner les valeurs de deux Set Inside HashMap java

for (Map.Entry<String, HashSet<String>> entry : myhashmap.entrySet()) { 
    // in the first iteration entry.getValue() give me elementValues1 Set 
// and the second give elementValues2 
} 

Par exemple, mon premier HashSet dans la première itération contient les valeurs suivantes: A, B Comme:

Set<String> elementValues1 = new HashSet<String>(); 
elementValues1.add("A"); 
elementValues1.add("B"); 

et mon deuxième ensemble dans la deuxième itération contient: C, D comme:

Set<String> elementValues2 = new HashSet<String>(); 
elementValues2.add("C"); 
elementValues2.add("D"); 

Je veux créer un autre ensemble à l'intérieur de la boucle qui combine les valeurs des deux Set: Like: Set elementValues3 = new HashSet();

elementValues3 should contain : 
A-C 
A-D 
B-C 
B-D 

que quelqu'un peut me aider à résoudre ce problème merci d'avance

+0

Avez-vous essayé d'utiliser [addAll] (https://docs.oracle.com/javase /7/docs/api/java/util/Set.html#addAll(java.util.Collection))? – jrtapsell

+0

addAll me donnera un ensemble avec des valeurs: A, B, C, D –

+0

itérer sur les deux, puis ajouter dans le troisième hashset. –

Répondre

5

Si vous voulez vraiment les couples de chaîne avec le - delimiter, boucle simplement les deux ensembles et ajouter les valeurs fusionnées au 3ème :

Set<String> elementValues3 = new HashSet<String>(); 
for (String s1: elementValues1) { 
    for (String s2: elementValues2) { 
     elementValues3.add(s1 + "-" + s2); 
    } 
} 

Le résultat pritned sera:

[AC, AD, BC, BD]

+0

Que voulez-vous dire exactement? –

5

en Java 8, vous pouvez bénéficier de flux:

Set<String> newSet 
     = elementValues1.stream() 
     .flatMap(a -> elementValues2.stream() 
     .map(b -> a + '-' + b)) 
     .collect(Collectors.toSet()); 
+0

Refusé pour le bon flux :)) –