Le 16 May 2002 Olivier M a �crit :
> Salut � tous
>
> J'ai une Map de paires d'objets.
> Chaque paire est constitu�e d'un objet unique (la
> cl�), et d'un objet theValue.
> Pour avoir la map tri�e selon la cl�, pas de probl�mes
> bien s�r.
D'apr�s ce que j'ai compris, une "Map" ne propose pas � elle seule un
tri ; seule les mises en oeuvre peuvent �ventuellement en proposer
un. Il faudrait donc que tu nous dises avec quelle Map exactement tu
travailles.
Dans la suite, j'imagine que c'est une TreeMap.
> Mais je souhaiterai trier ma map selon l'objet
> theValue, sachant que theValue n'est pas unique.
Si tu tiens � garder la possibilit� de plusieurs theValue ayant les
m�mes valeurs (selon "equals", je suppose), cela ne va pas �tre
simple. Tu ne peux pas utiliser directement un Map dans lequel ta
clef de rangement serait theValue, justement parce que tu vas contre
le principe du Map : une clef, une valeur, en non pas deux valeurs.
> L'objet theValue �tant de type Integer ou String, et
> donc impl�mentant l'interface Comparable, �a doit bien
> pouvoir se faire.
A condition tout de m�me qu'il y ait soit des Integer, soit des
String, sinon �a commence � �tre farfelu !
Je te propose de transformer ton TreeMap en un Set de Map.Entry, puis
de le convertir en un tableau, tableau que tu ordonnes avec un
Comparable perso.
Cela donne � peu pr�s (non test�) :
Set mapElemSet = leTreeMap.entrySet();
Map.Entry[] mapElemTab = mapElemSet.toArray(new
Map.Entry[mapElemSet.size()]);
Arrays.sort(mapElemTab, new ComparatorPerso());
Ta table mapElemTab est maintenant class�e ; ton ComparatorPerso peut
�tre :
class ComparatorPerso implements Comparator
{
public void compare(Object o1, Object o2)
{
Map.Entry mapEntry1, mapEntry2;
String s1, s2;
mapEntry1 = (Map.Entry)o1;
mapEntry2 = (Map.Entry)o2;
s1 = (String)mapEntry1.getValue();
s2 = (String)mapEntry2.getValue();
return s1.compareTo(s2);
}
... pour equals, c'est pareil que pour compare en rempla�ant
compareTo par equals.
}
Il reste que c'est un peu louf, car le Comparator s'exerce non sur
les objets pass�s en param�tres, mais sur une portion de ceux-ci.
(c'est le "getValue" qui r�pond � ton probl�me te classer les entr�es
selon leur valeur).
>
> Dans le m�me ordre d'id�e, je souhaiterais pouvoir
> retrouver l'ordre dans lequel les paires d'objets ont
> �t� ajout�es dans la map.
>
La seule solution que je vois pour �a est de te cr�er un Map � toi
qui red�finisse toutes les m�thodes � la mode "addQuelquechose", et
je ne suis m�me pas s�r que �a marche.
> Merci de vos conseils
Pourrais-tu nous donner ton probl�me de base, parce que je trouve que
les solutions que je te sugg�re sont un peu tir�es par les cheveux,
bien qu'elles r�pondent au probl�me tel que tu l'exprimes ? En fait,
tu voudrais donner � un Map des fontions pour lesquels il n'est pas
con�u, et c'est pour �a que l'on se retrouve dans des situations
limites.
--
Sur le Web, tout de suite.
Herve AGNOUX - diaam informatique
http://www.diaam-informatique.com