OVH Cloud OVH Cloud

Classer une TreeMap sur les valeur ?

11 réponses
Avatar
Frogger
Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci

10 réponses

1 2
Avatar
captainpaf
Le Tue, 28 Oct 2003 16:33:43 +0100, "Frogger"

Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci



Ben les autres n'ont pas été assez clair. Moi perso, j'ai un peu
l'impression que tu attendes que quelqu'un fasse le boulot à ta place.
Postes nous au moins quelque chose qui montre que tu as un peu cherché
et qu'on ne perd pas notre temps.

Avatar
Frogger
non, désolé, je ne post pas sans faire des recherches auparavant sur google
et l historique des newsgroup.

Je post car je sèche et ne vois pas comment faire.

Merci de ton aide en tout cas.


"captainpaf" a écrit dans le message de news:

Le Tue, 28 Oct 2003 16:33:43 +0100, "Frogger"

Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci



Ben les autres n'ont pas été assez clair. Moi perso, j'ai un peu
l'impression que tu attendes que quelqu'un fasse le boulot à ta place.
Postes nous au moins quelque chose qui montre que tu as un peu cherché
et qu'on ne perd pas notre temps.



Avatar
Frogger
je met des Integer, pas des int


"Bruno" a écrit dans le message de news:
BBC46728.C541%
dans l'article bnm2mc$19o$, Frogger à
a écrit le 28/10/2003 16:33 :


Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.


tu mets des int dans une treemap? es tu sur d'avoir le bon conteneur?
--
Bruno Causse
http://perso.wanadoo.fr/othello




Avatar
Bruno
dans l'article bnm2mc$19o$, Frogger à
a écrit le 28/10/2003 16:33 :


Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.


tu mets des int dans une treemap? es tu sur d'avoir le bon conteneur?
--
Bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Bruno
dans l'article BBC46728.C541%, Bruno à
a écrit le 28/10/2003 18:34 :

dans l'article bnm2mc$19o$, Frogger à
a écrit le 28/10/2003 16:33 :


Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.


tu mets des int dans une treemap? es tu sur d'avoir le bon conteneur?


je plaisante :)

je supose que tes objets possedent un variable d'instance de type int qui
est utile pour le classement?

c'est autour de cette valeur que tu dois "implementer" comparator dans ton
objet
--
Bruno Causse
http://perso.wanadoo.fr/othello


Avatar
Nicolas Repiquet
"Bruno" a écrit dans le message news:
BBC468EC.C547%

c'est autour de cette valeur que tu dois "implementer" comparator dans ton
objet


Je crois qu'il veut pouvoir récuperer les entrée de sa map clasées par
VALEUR et pas par CLEF.

-- Nicolas Repiquet

Avatar
Nicolas Repiquet
"Frogger" a écrit dans le message news:
bnm2mc$19o$
Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci


Ok je vois ce que tu cherches.

Tu peut faire comme ça :

class MyMapEntryComparator implements Comparator {
public static final MyMapEntryComparator instance new MyMapEntryComparator();
private MyMapEntryComparator() {}
public int compare( Object o1, Object o2 ) {
Integer i1 = (Integer)((Map.MapEntry)o1).getValue();
Integer i2 = (Integer)((Map.MapEntry)o2).getValue();
return i1.compareTo(i2);
}
}

Map map = new HashMap();

map.put( "fraise" , new Integer(18));
map.put( "tomate" , new Integer(3));
map.put( "banane" , new Integer(666));

SortedSet entries = new TreeSet(MyMapEntryComparator.instance);

entries.addAll( map.entrySet() );

Iterator i = entries.iterator();
while(i.hasNext()) {
System.out.println( ((Map.MapEntry)i.next()).getValue() );
}

Résultat ( aproximatif ) :

3
18
666


Voilà.

-- Nicolas Repiquet

Avatar
Frogger
exactement !

J ai bien vu comment classer par keys, mais c'est pas ce que je veux, je
veux classer par valeurs !

merci

Je crois qu'il veut pouvoir récuperer les entrée de sa map clasées par
VALEUR et pas par CLEF.

-- Nicolas Repiquet




Avatar
captainpaf
Le Tue, 28 Oct 2003 18:12:46 +0100, "Frogger"

non, désolé, je ne post pas sans faire des recherches auparavant sur google
et l historique des newsgroup.

Je post car je sèche et ne vois pas comment faire.

Merci de ton aide en tout cas.


"captainpaf" a écrit dans le message de news:

Le Tue, 28 Oct 2003 16:33:43 +0100, "Frogger"

Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci



Ben les autres n'ont pas été assez clair. Moi perso, j'ai un peu
l'impression que tu attendes que quelqu'un fasse le boulot à ta place.
Postes nous au moins quelque chose qui montre que tu as un peu cherché
et qu'on ne perd pas notre temps.




Salut,

désolé, j'ai peut être lu un peu vite ta question. Une TreeMap trie
les couples (clés, valeurs) que tu lui ajoutes en se basant sur les
clés. Pas les valeurs.
Toi, si j'ai bien compris, tu veux trier des donnés par valeurs et les
récupérer en utilisant une clé ?

Si j'ai vu juste, tu peux par exemple créer une nouvelle class qui
contiendrait tes deux objets.
La méthode equals de cette class se baserait sur les clés alors que la
méthode compareTo regarderait les valeurs.
Ensuite, il te suffit d'ajouter les objects dans ce que tu veux qui
trie. Par exemple un SortedSet.

Voilà, j'espère que ça répond à ton problème.



Avatar
Frogger
c'est ça en effet, merci

Par contre je comprend pas tout.

Dans ma map, j ai 52 éléments.

Quands je fais SortedSet entries = new TreeSet(ComparatorTest.instance);
je me retrouve avec un entries.size() = 5 !! Où sont passés les autres ?

Merci en tout cas

"Nicolas Repiquet" a écrit dans le message de
news: 3f9eaf29$0$27599$

"Frogger" a écrit dans le message news:
bnm2mc$19o$
Suite à mon post précédent, il semble qu'il faille utiliser une TreeMap
plutôt qu'un Hashtable, jusque là pas de souci.

Mais comment classer ce treemap par les valeurs ? Ces valeurs sont des
integer.

Merci


Ok je vois ce que tu cherches.

Tu peut faire comme ça :

class MyMapEntryComparator implements Comparator {
public static final MyMapEntryComparator instance > new MyMapEntryComparator();
private MyMapEntryComparator() {}
public int compare( Object o1, Object o2 ) {
Integer i1 = (Integer)((Map.MapEntry)o1).getValue();
Integer i2 = (Integer)((Map.MapEntry)o2).getValue();
return i1.compareTo(i2);
}
}

Map map = new HashMap();

map.put( "fraise" , new Integer(18));
map.put( "tomate" , new Integer(3));
map.put( "banane" , new Integer(666));

SortedSet entries = new TreeSet(MyMapEntryComparator.instance);

entries.addAll( map.entrySet() );

Iterator i = entries.iterator();
while(i.hasNext()) {
System.out.println( ((Map.MapEntry)i.next()).getValue() );
}

Résultat ( aproximatif ) :

3
18
666


Voilà.

-- Nicolas Repiquet





1 2