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

Android Discussion :

ArrayList<ArrayList<String>> OU sqlite


Sujet :

Android

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 534
    Par défaut ArrayList<ArrayList<String>> OU sqlite
    salut, salut,

    une fois n'est pas coutume, question à vous soumettre

    au départ, je voulais utiliser un ArrayList<ArrayList<String>> pour stocker quelque chose (issu d'un XmlPullParser) comme ça (schématiquement)
    -> ArrayList(1) = ArrayList(nom=toto, sexe=M, date=01/01/2017)
    -> ArrayList(2) = ArrayList(nom=machin, sexe=M, date=01/11/2016)
    -> ArrayList(3) = ArrayList(nom=titi, sexe=F, date=01/12/2016)
    -> etc.........
    sauf que je voudrais ensuite trier cette ArrayList<ArrayList<String>> selon date croissante

    donc:
    1.) déjà est-possible? à priori non, ou en tout cas je n'ai pas trouvé!

    2.) autre alternative
    -> utiliser plutôt une table temporaire sqlite pour stocker chaque ligne nom/sexe/date
    -> requêter à la fin la table avec un order by date
    -> mettre tout ça dans un curseur
    -> et traiter ensuite le curseur

    3.) vous voyez une chose solution?

    voilà, à vous de jouer
    @vos claviers, prêts, tapez!

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Citation Envoyé par steph68b Voir le message
    3.) vous voyez une chose solution?
    Oui. Utiliser le principe de la programmation objet

    Une classe People fait l'affaire :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class People implements Comparable<People>{
    String name;
    boolean isMale;
    Date birth;
     
    @Override
        public int compareTo(People other) {
           return this.birth.compareTo(other.birth);
        }
    }

    Puis c'est un jeu d'enfant :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList<People> data = new ArrayList<People>();
    ...
    Collections.sort(data); //Ca y est. C'est trié
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 534
    Par défaut
    Ok, 1-0 , mais ça sert aussi à ça Developpez, à sortir le nez de son guidon et voir plus large.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 534
    Par défaut
    donc si je résume (schématiquement, toujours):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ArrayList<People> data = new ArrayList<People>();
    People p = new People ();
     
    while(!xmlend)
    {
      p.setName(xpp.getAttributeValue(null, "name"));
      p.setIsMale(xpp.getAttributeValue(null, "isMale"));
      p.setBirth(xpp.getAttributeValue(null, "birth"));
      data.add(People);
    }
    Collections.sort(data); //Ca y est. C'est trié
    par contre, avec ta classe compareTo, le tri par défaut est ASC visiblement, mais si tu veux l'inverser et le passer en DESC?

  5. #5
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Non. Il faut créer un nouvel objet à chaque fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ArrayList<People> data = new ArrayList<People>();
    People p;
     
    while(!xmlend)
    {
      p = new People ();
      p.setName(xpp.getAttributeValue(null, "name"));
      p.setIsMale(xpp.getAttributeValue(null, "isMale"));
      p.setBirth(xpp.getAttributeValue(null, "birth"));
      data.add(People);
    }
    Collections.sort(data); //Ca y est. C'est trié
    Et pour trier dans l'autre sens, je pense qu'il suffit d'inverser la comparaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
        public int compareTo(People other) {
           return other.birth.compareTo(this.birth);
        }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par steph68b Voir le message
    par contre, avec ta classe compareTo, le tri par défaut est ASC visiblement, mais si tu veux l'inverser et le passer en DESC?
    A noter que quand tu veux trier dans l'ordre inverse, sans changer l'implémentation de la méthode compareTo(), tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort( data, Comparator.reverseOrder());
    (pour trier dans l'ordre normal, l'équivalent est Collections.sort( data, Comparator.naturalOrder()); qui correspond à l'appel par défaut Collections.sort( data );).

    D'ailleurs, tu n'es même pas obligé d'implémenter Comparable, pour pouvoir trier dans tous les ordres que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Collections.sort(list, Comparator.comparing(People::getName)); // nom ASC
    Collections.sort(list, Comparator.comparing(People::getName).reversed()); // nom DESC
    Collections.sort(list, Comparator.comparing(People::getName).thenComparing(People::getBirth).reversed()); // (nom, naissance) DESC
    Collections.sort(list, Comparator.comparing(People::getName).thenComparing(People::getBirth,Comparator.reverseOrder())); // nom ASC, naissane DESC
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 534
    Par défaut
    Collections.sort( data, Comparator.reverseOrder());
    voilà, c'est ce à quoi je pensais , sens de tri dynamique quoi et associé à un bouton

    merci pour vos explications à tous les deux, pour vos éclairages respectifs.

+ 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. Cast d'une ArrayList en ArrayList mère
    Par schneidb dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 15/10/2008, 13h26
  3. Arraylist de Arraylists de strings
    Par PomFritz dans le forum C#
    Réponses: 6
    Dernier message: 31/05/2008, 12h03
  4. Arraylist d'Arraylists - comment la parcourir
    Par koktel_dfr dans le forum C#
    Réponses: 5
    Dernier message: 26/05/2008, 13h34
  5. [VB.NET] PB ArrayList.CopyTo(ArrayList)
    Par AbyssoS dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/04/2006, 12h51

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