Diviser hashmap en deux

lily_bg -  
 Utilisateur anonyme -
Bonjour,

je souhaite réussir a faire ce démarche. Pourriez vous m'aider ?

Hashmap: A 12 B 21 C 26 D 34 E 41 F 41 G 56

je voudrais comparer la valeur 34 par les valeurs du hashmap
==> si hashmap.get(key)==34
*** diviser le hashmap en deux ***

Hashmap1: A 12 B 21 C 26
Hashmap2: E 41 F 41 G56

Merci
A voir également:

4 réponses

Utilisateur anonyme
 
En parcourant la hashmap, et en ayant crée une seconde hashmap tu peux ensuite utiliser la méthode remove pour supprimer les valeurs à retirer de la première hashmap :

Map map = new HashMap(); 
//On suppose ici l'initialisation de la hashmap map 

Map map2=new HashMap(); 

Set cles = map.keySet();//retourne un tableau d'objet de type Set contenant les clés de la hashmap 

//it pointe sur le début de la hashmap
Iterator it = cles.iterator(); 
while (it.hasNext()){ //vrai tant que next existe
   Object cle = it.next(); // Récupération de la prochaine clétu p
   Object valeur = map.get(cle); // recupération de la clé

//Tu peux ensuite tester ici la cle et insérer dans la nouvelle hashmap map2, supprimer dans la premiere etc  

}


Résolu? ===> [RESOLU]
0
Utilisateur anonyme
 
Apparemment j'ai un peu de retard il y a beaucoup plus efficace maintenant avec le for étendu:

//Attention aux type du couple clé valeur
for(Map.Entry<TypeCle, TypeValeur> couple : map.entrySet()) {
TypeCle cle = couple.getKey();//Recup clé
TypeValeur valeur = couple.getValue();//Recup valeur
// Traitements ...
}
0
lily_bg
 
Merci

Mais mon probleme etait comment mettre
les valeurs qui precedent la valeur 34 dans une HAshmap
les valeurs qui suivent 34 dans une autre Hashmap :)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Premièrement ton affichage des map est un peu ambiguë, je pense que tu veux dire que tu as ceci :

map: {A=12, B=21, C=26, D=34, E=41, F=41, G=56}
map.get(key) = 34
==>
map1: {A=12, B=21, C=26} 
map2: {E=41, F=41, G=56}


Cependant il y a au moins deux problèmes, que se passerai-t-il si tu avais plusieurs fois la même valeur ? Par exemple :

map: {A=1, B=2, C=1, D=2, F=1}
map.get(key) = 2

Quel serait le résultat attendu ?

map1: {A=1} 
map2: {C=1, D=2, F=1}

ou peut-être :

map1: {A=1} 
map2: {C=1}
map3: {F=1}

Dans ton problème ce n'est pas clair.

Autre problème. Plus grave. Tu utilises des HashMap comme si elles étaient triées, sur les clés, or ce n'est pas du tout le cas. Et "l'ordre" réel de tes éléments va énormément modifier le contenu de tes maps de résultats

Exemple :

public static void main(String[] args)
{ 
    HashMap<Character,Integer> map = new HashMap<Character,Integer>();

    map.put('A', 12);
    map.put('B', 21);
    map.put('C', 26);
    map.put('D', 34);
    map.put('E', 41);
    map.put('F', 41);
    map.put('G', 56);
    
    System.out.println(map);
}

Comme tu peux le voir, l'ordre réel de la map avec ton exemple sera :
map: {D=34, E=41, F=41, G=56, A=12, B=21, C=26}

Donc si tu "coupes" avec 34 tu obtiendras

map1: {}
map2: {E=41, F=41, G=56, A=12, B=21, C=26}

Il faut donc faire très attention à ce que tu veux faire, avant même de se poser la question de comment on le code en Java !

Donnes nous quelques éclaircissements sur les deux points que j'ai relevé (l'ordre des clé, et la multiplicité des valeurs qui peuvent être obtenues), afin que l'on puisse t'aider au mieux pour ce que tu veux faire.
0
Utilisateur anonyme
 
J'ai pas dû tout comprendre...
Si tu veux mettre les valeurs inférieures à 34 dans une hashmap et les supérieures dans une autre je ne vois pas où est ton problème...
Si tu essai juste de la couper en deux "au milieu" tu vas avoir des surprises
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Effectivement, si c'était "mettre les valeurs inférieures à 34 dans une hashmap et les supérieures dans une autre" ça serait simple, mais ce n'est pas comme ça que je comprends "les valeurs qui precedent la valeur 34", d'où ma longue explication des "surprises" que l'on pourrait avoir...
0
Utilisateur anonyme
 
autant pour moi ;)
0