Tris différent sur une liste

Tris différent sur une liste - Java - Programmation

Marsh Posté le 18-04-2006 à 17:15:34    

Voilà j'utilise une liste que je tri de 2 maniere différente.
 
 
NB : c'est un tri de chaine de caractere.
 
1ere maniere (avec DisplayTag)
2eme maniere avec Collections.sort (en implémentant la méthode compare).
 
Je trouve pas la même chose !  :sweat:  
 
DisplayTag me sort :
 
14800133
14800141
14800142  
14800143  
14800144  
14800148    
14800151  
14800153  
14800157  
14800158  
14800622  
14802794
14802827  
14810041
148128610550170E0902  
148139314220479  
148147202240114  
148147202796990
148222502383660  
148246810520398  
....
....
....
148449606090166
148449606807113  
148449606809137E0705
148449902090157
148449902095606
1-JW457
1-JW457
1-JW457
1-JW457
1-JW457  
 
 
 
et avec ma méthode toute bête (avec compareTo de string), j'ai l'impression que c'est inversé mais que beaucoup de chose ne colle pas même en inversant la liste.
 
Le resultat avec ma méthode
 
1-JW457  
1-JW457  
1-JW457  
1-JW457  
1-JW457  
14800133  
14800141  
14800142  
14800143  
14800144  
14800148  
14800151  
14800153  
14800157  
14800158  
14800622  
14802794  
14802827  
14810041  
148128610550170E0902  
148139314220479  
148147202240114  
....
....
....
148447202918597  
148447202919165  
148447202919276  
148447202920303  
148447202921315  
148447202922105  
148447202922216  
148447202924730E0805  
148447202947670  
148447206295172  
148448806227192  
148448810369109E0705  
148448810372159E0705  
148449406300690  
148449406305139  
148449406310602  
148449602347178  
148449606090166  
148449606807113  
148449606809137E0705  
148449902090157  
148449902095606  
 
 
 
quel sort de tri me fait DisplayTag ?
 
J'ai regardé dans le code source de DisplayTag, mais je trouve aps le comment du pourquoi ....
 
Voici son code de tri (enfin je crois)
 

Code :
  1. /**
  2.      * Compares two given objects handlig nulls and not comparable objects are handled. Not comparable objects are
  3.      * compared using their string representation.
  4.      * @param object1 first object to compare
  5.      * @param object2 second object to compare
  6.      * @return int result
  7.      */
  8.     private int checkNullsAndCompare(Object object1, Object object2)
  9.     {
  10.         int returnValue = 0;
  11.         if (object1 instanceof Comparable && object2 instanceof Comparable)
  12.         {
  13.             returnValue = ((Comparable) object1).compareTo(object2);
  14.         }
  15.         else if (object1 != null && object2 != null)
  16.         {
  17.             // if object are not null and don't implement comparable, compare using string values
  18.             returnValue = object1.toString().compareTo(object2.toString());
  19.         }
  20.         else if (object1 == null && object2 != null)
  21.         {
  22.             returnValue = 1;
  23.         }
  24.         else if (object1 != null && object2 == null)
  25.         {
  26.             returnValue = -1;
  27.         }
  28.         else
  29.         {
  30.             // both null
  31.             returnValue = 0;
  32.         }
  33.         int ascendingInt = this.ascending ? 1 : -1;
  34.         return ascendingInt * returnValue;
  35.     }


Message édité par Mazda3 le 18-04-2006 à 17:22:19
Reply

Marsh Posté le 18-04-2006 à 17:15:34   

Reply

Marsh Posté le 18-04-2006 à 17:26:20    

En regardant bien les 2 listes, on voit que pour displaytag, un caractere alphabétique est > qu'un caractere alphanumérique, alors qu'avec le CompareTo de la classe String c'est l'inverse ....
 
Mais quel méthode utilise-t-il pour en arriver à cela ?
 
comment implementer cela ?

Reply

Marsh Posté le 18-04-2006 à 18:06:56    

Si une ame charitable passe par ici :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed