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 :

[ArrayList<ArrayList>] Tri selon index


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut [ArrayList<ArrayList>] Tri selon index
    Bonjour,

    j'ai un titre peu clair, mais je pense que je vais avoir du mal à expliquer ce que je tente de faire :
    J'ai mes objets de type Concordance, qui sont essentiellement composés de trois ArrayList<String> (indexTete n'est pas pertinent ici).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Concordance implements Comparable{
     
        // Attributs
     
        private final ArrayList<String> pivot, contexteG, contexteD;
        private final int indexTete;
     
        // Constructeurs
        // ...
    Après, dans une autre classe, j'ai besoin d'une ArrayList<Concordance>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Concordance> kwic;
    Dans le cas de cette liste les Concordance sont construites de telle sorte que, partout, pivot à la même longuer p, contexteG la même longueur g et contexteD la même longueur d ; par contre je dois raisonner quelles que soient les valeurs de p, g et d.

    Le but de la manoeuvre, c'est de trier kwic. Mais les options de tri sont particulières :
    • String de rang i dans pivot
    • OU String de rang j dans contexteG
    • OU String de rang k dans contexteG

    J'ai tourné le problème dans tous les sens, j'ai tenté de faire quelque chose avec des Comparator, genre http://www.onjava.com/pub/a/onjava/2...mp.html?page=2 Listing 10, mais en fait je vois pas comment passer l'index.

    En plus, il faut que j'arrive à glisser une Locale là dedans !

    Merci,
    - Rapunzel

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    La deuxième piste est la bonne ... (Comparator).
    Pour le passage de paramètres (comme l'indice i, j ouk) utilises le constructeur .
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class PivotComparator<Concordance>{
      private int i;
      public PivotComparator(int i){
        this.i = i;
      }
     
      public int compare(Concordance arg0, Concordance arg1){
        return arg0.get(i).compareTo(arg1.get(i));
      }
    }
    Ensuite, quand tu feras appel au tri, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort(kwic, new PivotComparator(leIQueTuVoudras));
    Voilà pour le principe !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut
    Bonjour,
    wow, merci !

    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
    public class PivotComparator<Concordance>{
     
        // Attribut
        private int index;
     
        // Constructeur
        public PivotComparator(int i){
            this.index = i;
        }
     
        // Méthode
        public int compare(Concordance conc1, Concordance conc2){
            return conc1.getPivot().get(index).compareTo(conc2.getPivot().get(index));
        }
     
    }
    Mais dans ma méthode, on me dit cannot find symbol method getPivot(), class java.lang.Object. Ma méthode getPivot() est pourtant dans ma classe Concordance, j'ai tenté de caster conc1 et conc2 ça ne change rien...

    Z'avez une idée ? Et, euh... j'veux pas trop en demander, mais je la case où ma Locale ?

    Merci,
    - Rapunzel

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.

    Citation Envoyé par rapunzel
    dit cannot find symbol method getPivot(), class java.lang.Object
    Le problème vient du fait que la méthode compare reçoit 2 Objects et non pas 2 Concordances ...

    Je pense que ça provient de la déclaration de kwic ou encore de l'instanciation de ses éléments ...

    Veux tu STP nous fournit un extrait de code (surtout pas tout ton programme : ça fait fuir les gens des dizaines de lignes de code ...). Donc un extrait de code qui inclut la déclaration de kwic ainsi que son initialisation ...

    Pour cette histoire de Locale, je ne suis pas sûr de te suivre ... Plus de détails seront les bienvenues !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut
    Merci de prendre le temps de répondre. Je vais tenter de tout bien expliquer, en ne mettant que ce qui est nécessaire.
    Concernant la déclaration de kwic et son initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ArrayList<Integer> index = new ArrayList();
    // ...Je remplis index...
    ArrayList<Concordance> kwic = new ArrayList(index.size());
    for(int i = 0; i < index.size(); i++){
         kwic.add(new Concordance(this.items, index.get(i), q.size(), g, d));
    }
    Une fois que j'ai fait ça, je ne touche plus à kwic (sauf pour le trier).

    Je n'ai pas touché à PivotComparator<Concordance> depuis mon dernier post (j'y avais copié mon code).

    Pour l'histoire de la Locale : mes Concordance, c'est essentiellement des String, et quand je les trie, quelle que soit la clé que je choisis, il faut que ça soit en fonction d'une Locale (genre Locale.FRENCH) pour, par exemple, que "é" ne soit pas après "z". Par exemple pour qu'un TreeSet<String> soit bien classé "à la française je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeSet<String> tagSet = new TreeSet(Collator.getInstance(Locale.FRENCH));
    Ma question c'est de savoir où je case Collator.getInstance(Locale.FRENCH) ou Locale.FRENCH ici.

    Merci,
    - Rapunzel

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Citation Envoyé par rapunzel
    ArrayList<Concordance> kwic = new ArrayList(index.size());
    Je dirais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<Concordance> kwic = new ArrayList<Concordance>
    (index.size());
    RQ : essaies toujours d'utiliser l'interface pour la déclaration : List, Set, Map, etc. et choisis l'implémentation lors de l'instansiation.
    Autre chose : Si tu utilises les génériques de Java 5.0, fais le dans la déclaration et dans l'instansiation : par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Type> x = new ArrayList<Type>();
    .

    Pour l'histoire de locale, j'avoues que je n'en sais pas trop ... Mais je crois que c'est dans la comparaison de String que ça intervient ...

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

Discussions similaires

  1. Problème d'ArrayList d'arrayList d'arrayList
    Par Shaina dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 25/02/2011, 11h04
  2. tri d'index de tableau par rapport au contenu
    Par parisien dans le forum C
    Réponses: 7
    Dernier message: 13/02/2006, 23h32
  3. tri selon le nombre d'enregistrement
    Par bugbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/12/2005, 13h57
  4. Tri selon formule dans modification d'un état...
    Par JeremieT dans le forum Access
    Réponses: 3
    Dernier message: 26/09/2005, 13h36
  5. [pseudocode]Incompréhesnion pour un tri sur index
    Par ImpaCt dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/08/2005, 23h52

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