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 :

Comment partitionner une collection en sous-collections


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comment partitionner une collection en sous-collections
    Bonjour à tous,

    Je débute en Java et cherche de l'aide pour résoudre le problème suivant :

    1. Write a ListPartitioner class that implements the following interface:

    import java.util.Collection;
    public interface IListPartitioner<T> {
    Collection<Collection<T>> partition(Collection<T> items, int size);
    }

    The partition method should return consecutive sub-collections of the input collection, each of the same size, except the final collection which may be smaller.

    * Example 1: partition([1,2,3,4,5], 2) --> [ [1,2], [3,4], [5] ]
    * Example 2: partition([1,2,3,4,5], 3) --> [ [1,2,3], [4,5] ]
    * Example 3: partition([1,2,3,4,5], 1) --> [ [1], [2], [3], [4], [5] ]

    2. Write unit tests using junit4 to verify your implementation.

    J'ai trouvé du code sur le net pour réaliser la manip' avec des List/ArrayList mais pas pour le type Collection....faut-il envisager de convertir Collection en List pour pouvoir résoudre le problème ?

    Merci par avance pour votre aide ;-)

    StéphaneM

  2. #2
    Membre actif Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Points : 205
    Points
    205
    Par défaut
    Bonjour,

    Collection c'est une interface tu dois passer par une ArrayList, HashMap ...

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci Habib de ta réponse !

    Cependant, je ne vois pas bien comment convertir la Collection en entrée vers une ArrayList (eh oui, je suis vraiment un grand débutant )
    J'ai trouvé un exemple code pour réaliser ce traitement basé sur ArrayList, le résultat obtenu semble OK mais j'ai encore des soucis sur la partie test avec JUnit

    Si quelqu'un peut m'apporter de l'aide pour finaliser...

  4. #4
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    Slt.
    Le mieux, ça serai que tu déclare une nouvelle class qui implémente cette interface. En suite, t'as le choix entre deux solutions :
    Ou bien tu déclare un attribut avec comme type, l'un des types qui implemente l'interface Collection deja definie comme les ArrayList ...
    Ou bien tu déclare la class comme extension d'une class qui implémente l'interface Collection deja definie comme les ArrayList ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Partitionnement <T> implements IListPartitioner {
            private ArrayList <T> tab;
     
            @Override
            public Collection partition(Collection items, int size) {
               ...
               Collection <T> c = new ...;
               T a = tab...;
               c.add (a);
            }
            ...
        }
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Partitionnement <T> extends ArrayList implements IListPartitioner {
     
            @Override
            public Collection partition(Collection items, int size) {
               ...
               Collection <T> c = new ...;
               T a = this...;
               c.add (a);
            }
            ...
        }
    Puis-tu, si possible, nous expliquer ton problème avec JUnit
    Bon courage

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum.

    Pas besoin de tout compliquer comme ça ni de changer les paramètres de la méthode.

    Le type en entrée est Collection<T>, eh bien ça ne fait presque aucune différence avec une List<T> ou une ArrayList<T>. Dans les trois cas on peut facilement les parcourir dans l'ordre, soit avec un foreach, soit avec un Iterator<T>. Comme on préfère.

    Le type en sortie est Collection<Collection<T>>. Comme ArrayList implémente Collection, ça veut dire qu'on a parfaitement le droit de renvoyer une ArrayList<Collection<T>> en sortie.
    Et pour la même raison, cette ArrayList qui accepte qu'on lui insère des Collection<T>, accepte notamment qu'on lui insère des ArrayList<T>.

    Autrement dit, l'algorithme qui fait ça avec des ArrayList fonctionne presque pareil avec des Collection. Il faudra peut-être adapter la boucle de parcours, et redéfinir un type genre ArrayList<ArrayList<T>> en ArrayList<Collection<T>>, et c'est tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment detecter une partition linux sous windows?
    Par ibtisss dans le forum Administration système
    Réponses: 5
    Dernier message: 09/02/2006, 11h15
  2. Comment faire une recherche/remplacement sous Linux
    Par fabszn dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/02/2006, 16h38
  3. Comment faire une analyse croisée sous MySQL ?
    Par jcachico dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/12/2005, 18h32
  4. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38
  5. comment établir une liaison usb sous visual c++ ?
    Par Baby_Chou dans le forum MFC
    Réponses: 2
    Dernier message: 03/02/2005, 08h31

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