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

Java Discussion :

Guava : liste de liste


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut Guava : liste de liste
    Bonjour,

    Voici mon soucis :

    J'ai un bean Payment avec plusieurs attributs :
    - type : operationCode
    - date : settleDate
    - montant : amount
    etc...

    je dois trier une liste de payments par type et date

    Pour ce faire j'ai utilisé Guava

    Je recupère une liste dans ma bdd et ensuite je la trie
    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
     
    list = Ordering.from(byCodeOpe).compound(bySettleDate).sortedCopy(list);
     
     
     
    Comparator<Payment> byCodeOpe = new Comparator<Payment>(){
    		public int compare(final Payment p1, final Payment p2){
    			return p1.getOperationCode().compareTo(p2.getOperationCode());
    		}
    	};
     
    Comparator<Payment> bySettleDate = new Comparator<Payment>(){
    	public int compare(final Payment p1, final Payment p2){
    		return p1.getSettleDate().compareTo(p2.getSettleDate());
    	}
    };
    ça marche.


    Mais est ce possible de récupérer une liste de sous-liste ? Je m'explique :

    Voici une liste de 4 payments récupérée de ma bdd:
    Type-----Date----- montant
    060 ----- 110306 ---- 150
    160 ----- 120306 ---- 140
    060 ----- 110307 ---- 120
    160 ----- 120306 ---- 130

    Actuellement guava me renvoie cette liste triée
    Type-----Date----- montant
    060 ----- 110306 ---- 150
    060 ----- 110307 ---- 120
    160 ----- 120306 ---- 130
    160 ----- 120306 ---- 140


    Ma question , est ce que guava peut me renvoyer une liste de sous-liste de payment, c'est à dire :

    --------------Type-----Date----- montant
    sous-liste 1---060 ----- 110306 ---- 150

    sous-liste 2---060 ----- 110307 ---- 120

    sous-liste 3---160 ----- 120306 ---- 130
    sous-liste 3---160 ----- 120307 ---- 140


    Donc guava renverrait une liste de 3 éléments (3 sous listes)

    J'ai vu qu'on pouvait utiliser "Multimaps.index(Iterable, Function)" mais j'ai du mal à comprendre le principe ... et donc je ne sais pas si je fais fausse route ou pas avec ça


    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est probablement une solution simple, oui.

    Mais tu as pas expliqué pourquoi les deux premières entrées sont dans deux sous-listes séparées, et pourquoi les deux dernières sont toutes les deux dans une troisième sous-liste.
    Alors c'est difficile à dire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    salut,

    exact ! y'a une erreur dans ma 3ème sous-liste, ça serait plutôt :

    sous-liste 3---160 ----- 120306 ---- 130
    sous-liste 3---160 ----- 120306 ---- 140


    En fait je dois les trier par type et par date
    les 2 premiers sont dans deux sous-listes différentes car c'est le même type "060" mais pas la même date "110306" et "110307"
    Les 2 derniers sont dans la même sous liste car même type "160" et même date "120306".

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    J'ai trouvé ça sur le net mais je comprends à moitié la solution...

    http://stackoverflow.com/questions/8...by-using-guava

    Est ce applicable à mon problème ?

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Oui, ca semble applicable. D'apres la javadoc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<String> badGuys =
           Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
       Function<String, Integer> stringLengthFunction = ...;
       Multimap<Integer, String> index =
           Multimaps.index(badGuys, stringLengthFunction);
       System.out.println(index);
    Dans ton cas, ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function<Payment, String> keyFunction = new Function<Payment, String>() {
    @Override
    public String apply(Payment input)
    {
    // L'astuce, c'est de creer un String qui sera le meme si et seulement si 2 Payment
    // doivent etre dans le meme groupe. On peut par exemple concatener la
    // date et le type pour que ce soit le cas.
    return input.getType() + "," + input.getFormattedDate();
    }
    };
    Ensuite, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Multimap<Integer, String> index = Multimaps.index(list, keyFunction);
    D'apres la javadoc, l'ordre est gardé entre la liste principale et les sous-listes. Si tu veux que tes sous-listes soient également triées, il convient de trier la liste principale avant de faire les sous-listes...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    En effet ça marche très bien !!!

    Merci beaucoup !

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

Discussions similaires

  1. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  2. Liste de liste?
    Par Bethoring dans le forum C++
    Réponses: 4
    Dernier message: 16/11/2005, 18h19
  3. Liste de listes
    Par SteelBox dans le forum Prolog
    Réponses: 5
    Dernier message: 16/10/2005, 16h21
  4. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 15h21
  5. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00

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