IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Tri d'une ArrayList de tableaux


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut Tri d'une ArrayList de tableaux
    Bonjour,

    Je cherche à trier une ArrayList de tableau selon une colonne du tableau.

    Le problème c'est que Collections.sort ne marche qu'avec une liste contenant des objets comparables. Or ici, j'ai un tableau et je ne vois pas où je pourrais redéfinir le compareTo. Y'a-t-il un moyen de faire ça sans créer une classe supplémentaire afin d'avoir une ArrayList<Classe> où Classe serait comparable ?

    Voilà en gros en quoi consiste mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ArrayList<String[]> aList = new ArrayList<String[]>();
    for (Iterator<Journey> iter = aJourneyList.iterator(); iter.hasNext();) {
    	String[] aDate = new String[5];
            aList.add(aDate);
    }
    En plus de ça, j'ai un souci avec mon ArrayList. J'ai passé toutes les variables du tableau aDate en String alors qu'initialement, les 5 colonnes sont respectivement des int, int, Date, Date, int.
    Comme je souhaite trier suivant la troisième colonne qui est une date, pour l'instant j'ai fait une double boucle for pour passer ça en matrice.

    Voila j'espère que j'ai pas été trop confus, s'il faut des éclaircissements, j'essaierai d'être plus précis.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Citation Envoyé par Alqualonde
    initialement, les 5 colonnes sont respectivement des int, int, Date, Date, int.
    Si j'ai bien compris, par rapport au bout de code que tu as publié, ces colonnes representent un objet "Journey". Pourquoi les convertir en tableau?

  3. #3
    Membre habitué Avatar de Celeborn
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 156
    Points
    156
    Par défaut
    Bonjour,

    Il y aurait éventuellement moyen de faire ce que tu veux, en implémentant ton propre Comparator java.util.Comparator celui dont se basera compareTo et le sort de ta collection.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    En fait ce n'est pas vraiment un objet journey que je mets dedans mais quelque chose que je crée. Par contre, Yusherboy tu as quand même raison, je n'ai aucune raison de convertir ça en tableau.

    Du coup j'ai créé une classe supplémentaire mais mon Collections.sort n'a pas l'air de fonctionner (ça compile)

    Voila mon code plus précisément :

    Classe Travel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class Travel implements Comparable{
     
    	private int num = 0;
    	private Date aBeginningDate = null;
    	private Date  anEndingDate = null;
    	private int tTime = 0;
    	private double tLength = 0;
     
    [... constructeur et autres fonctions get et set ...]
     
       public int compareTo(Object arg0) {
    		Date beginningDate =      (Date)((Travel)arg0).getABeginningDate();
    		GregorianCalendar aCal1 = new GregorianCalendar();
    		aCal1.setTime(beginningDate);
    		GregorianCalendar aCal2 = new GregorianCalendar();
    		aCal1.setTime(aBeginningDate);
     
    		long aDate1 = aCal1.getTime().getTime();
    		long aDate2 = aCal2.getTime().getTime();
    		if(aDate1<aDate2)
    		{
    			return -1;
    		}
    		else {
    			if (aDate1==aDate2)
    			{
    				return 0;
    			}
    			else
    			{
    				return 1;
    			}
    		}
    	}

    Et voila comment je remplis mon ArrayList<Travel>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    for (Iterator<Journey> iter = aJourneyList.iterator(); iter.hasNext();) {
    				Journey element = (Journey) iter.next();
    				Map<Station,Date> aMap = element.getAJourney();
    				if(aMap.containsKey(anIOParametersArray[0]) && aMap.containsKey(anIOParametersArray[1])){
    					Travel aTravel = new Travel();
    					aTravel.setNumBadge(anUser.getId());
     
    					//Déclaration des deux calendriers
    					GregorianCalendar gregCal1 = new GregorianCalendar();
    					GregorianCalendar gregCal2 = new GregorianCalendar();
     
    					for (Station aStation : aMap.keySet()){
    						Date aDate = aMap.get(aStation);
    						if(aStation.getStationName() == anIOParametersArray[0].getStationName()){
    				gregCal1.setTime(aDate);
    							aSToSTravel.setABeginningDate(aDate);
    						}
    						if(aStation.getStationName() == anIOParametersArray[1].getStationName()){
    				gregCal2.setTime(aDate);
    							aSToSTravel.setAnEndingDate(aDate);
    						}
    					}
    					//Calcul de l'écart entre les deux dates en millisecondes
    					long aTemporaryDifference = gregCal2.getTime().getTime()-gregCal1.getTime().getTime();
    					//Passage en minutes
    					int aDifferenceInMinute = Double.valueOf(aTemporaryDifference/60000).intValue();
     
     
    					aTravel.setTravelTime(aDifferenceInMinute);
    					aTravel.setTravelLength(anIOParametersArray[1].getStationPR()-anIOParametersArray[0].getStationPR());
    					aTPList2.add(aSToSTravel);
    				}
    			}
    	Collections.sort(aTPList2);
    		return aTPList2;
    }
    Je vois pas ce qui coince... quand je suis pas à pas comment il met tous ces résultats, je m'aperçois qu'il lit les "Travel" dans un ordre donné que je ne maîtrise pas, mais après le sort, rien n'a changé :-(

    PS : merci à Celeborn et Yusherboy qui m'ont répondu si rapidement :-) J'avoue que c'est déjà bien confus dans ma tête alors je ne peux qu'apprécier l'effort que vous avez dû fournir pour suivre mes piètres explications...

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Quel tête en l'air je suis... j'ai laissé un Cal1.setTime() dans le deuxième set pour mon CompareTo... Du coup ça marche !!!

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Tri d'une variable tableau multidimension
    Par sty255 dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2008, 08h56
  2. tri d une arraylist
    Par *alexandre* dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 22/09/2008, 10h03
  3. tri d'une arraylist d'interface
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/11/2006, 16h37
  4. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo