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 :

Collection de collection


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut Collection de collection
    Bonjour, voila je suis actuellement en train de faire un programme en java et je viens de me rendre compte que je dois faire une collection de collection... mais c'est que je ne sais pas du tout comment mis prendre... auriez vous des exemples à me proposer?
    merci
    Elisha

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Que fait ce sujet dans la section Eclipse?!

    Pour repondre à ta question, imaginons un Lycée, avec des classes, et des élèves.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Eleve
    {
        String nom;
        String prenom;
        ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Classe
    {
        ArrayList<Eleve> classe;
        ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Lycee
    {
        ArrayList<Classe> lycee;
        ...
    }
    Rien de bien compliqué!

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Points : 228
    Points
    228
    Par défaut
    Ca ce n'est pas une collection de collections...

    Alors que ça oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collection<Collection<String>> collections;
    Après la manipulation dépend de l'implémentation choisie.

    Tu peux faire par exemple
    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
     
    Map<String, List<Voiture>> voitures = new HashMap<String, List<Voiture>>();
     
    // on crée une liste de voitures
    List<Voiture> voituresFord = new ArrayList<Voiture>();
    voituresFord.add(new Voiture("GT"));
    voituresFord.add(new Voiture("Mustang"));
    // tu peux créer une autre liste avec des ferrari par exemple.
     
    // on insère les listes de voitures dans la Map
    voitures.put("ford", voituresFord);
    voitures.put("ferrari", voituresFerrari);
     
    // Et pour les récupérer il suffit de faire 
    List<Voiture> maListeVoituresFord = voitures.get("ford");
    Voiture fordGT = maListeVoituresFord.get(0);
    c'est pas forcément l'exemple le meilleur pour illustrer (notamment les List) mais ça te donne une idée de comment manipuler des collections de collections.

    Après, je te conseille vivement de chercher un cours sur les collections en java. Tu devrais en trouver sur developpez.com.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    bonjour !! merci pour vos messages...
    je viens de lire vos messages et je vais essayer la deuxième proposition.. je pense qu'elle correspond plus à ce que je veux !!!
    merci
    je vous tiens au courant de mon avancement
    Elisha

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Ecrire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Classe> lycee;
    ou ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<Eleve>> lycee;
    donne exactement le même résultat
    A la seule différence qu'en situation réelle seule la 1ère solution sera utilisée.

    Ta solution va à l'encontre des principes fondamentaux de la programmtion objet.

    Avec ce que je propose, si tu veux par exemple rajouter un maillon entre le lycée et les classes, un Niveau (2nde, 1ère, terminale, etc.) par exemple, il me suffit de créer une nouvelle classe Niveau et de changer une seule valeur (Classe qui se transforme en Niveau) dans la classe Lycee.
    Alors que si toi tu veux faire un classement berline, citadine, etc. (on est donc dans le même principe puisque ca irait entre la marque et le model) tu dois modifier tout ton code.

    Alors c'est vrai que ce que je propose n'est pas une vraie collection de collection, mais en temps que professionnel, mon choix est vite fait

    Il faut bien se dire que même si c'est théoriquement possible de faire une collection de collection, puisqu'une collection accepte des objets et qu'une collection est un objet (...), en pratique l'utiliser signifie dans 100% des cas qu'on a louper une étape dans la conception.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Points : 228
    Points
    228
    Par défaut
    D'abord elisha a demandé une collection de collections, pas une simple collection.
    Tu ne réponds donc à sa demande.

    Ensuite tu te trompes quand tu dis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<String>>
    et c'est la même chose. Ce n'est pas le cas du tout.
    Je te laisse relire quelques cours pour comprendre pourquoi

    Ensuite tu sembles avoir une vision un peu tranchée et superficielle de la manipulation et de l'utilité des collections.
    J'ai souvent l'occasion de manipuler des structures de données où justement on a des collections de collections, et ça permet de faire certaines choses assez élégantes.

    Enfin :
    Ta solution va à l'encontre des principes fondamentaux de la programmtion objet
    Rien que ça ?
    Peux-tu me citer un principe de la POO ?
    Et je corse la chose : Peux-tu me citer un principe de la POO qui contredise ce que je raconte ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par sir_gcc Voir le message
    D'abord elisha a demandé une collection de collections, pas une simple collection.
    Tu ne réponds donc à sa demande.
    Je réponds dans un sens pratique, par la meilleure solution d'arriver au résultat.

    Citation Envoyé par sir_gcc Voir le message
    Ensuite tu te trompes quand tu dis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<String>>
    et c'est la même chose. Ce n'est pas le cas du tout.
    Je te laisse relire quelques cours pour comprendre pourquoi
    Je te laisse relire mes deux précédents posts et tu comprendras que ce n'est pas ce que j'ai écris!

    Pour le reste, si on part du principe que c'est contraire au principe de la séparation des classes métiers en unité atomique, à la réutilisabilité, etc. il est difficile de dire que ce soit une manière élégante de programmer.
    Mon exemple me semblait convaincant, mais visiblement tu n'as pas du maintenir des projets à échelles industrielles. Sinon tu comprendrais l'utilité de tout séparer.
    Imagine un peu une collection de collection dans une autre collection avec mon exemple Lycée, Niveau et Classe ou Marque, Type et model

    Enfin autre exemple. Aujourd'hui j'ai décidé d'étendre mon application. Je veux savoir les élèves qui mangent à la cantine. Leur classe et niveau m'est inutile, je veux juste les élèves. Il me suffit de reprendre ma classe Elève et c'est règlé.
    Si j'avais une collection de string (Elève) dans une Collection (Classe), elle-même dans une autre collection (Niveau), tout ca dans une collection (Lycée) ca serait totalement ingérable.

    Pour la vision tranchée, c'est juste une expérience de 5 ans dans le métier. Je pense être à même de diffrencier une bonne d'une mauvaise pratique.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Points : 228
    Points
    228
    Par défaut
    Je n'ai pas spécialement envie de poursuivre cette discussion qui ne nous mènera à rien puisque visiblement on n'a pas les mêmes références.
    Les relations entre les entités dans un modèle de données ne sont pas toutes représentées dans les classes. Une (grande) partie est déléguée uniquement au modèle physique (la base par exemple).
    Ensuite les collections de collections ne sont pas utiles uniquement pour représenter des données métier. Bien qu'elles puissent l'être, je le maintiens.

    Et je maintiens aussi que tu as une vision trop tranchée et simpliste des choses.
    Si tu t'appuies sur tes 5 ans d'expérience pour affirmer que tu sais de quoi tu parles, c'est que tu manques d'humilité et de sens critique.

    Pour moi, cette discussion stérile de gallinacés prétentieux est close.
    Bonne continuation.

  9. #9
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Loin de mot le désir de relancer le débat
    On peut tout de même dire que les deux réponses on leur avantage et leur inconvénient.

    Le principal avantage de la réponse de sir_gcc est de répondre précisément a la question sans avoir un sens critique le problème soujacent.

    @Ikey ne répond pas réellement à la question mais apporte une vision critique du problème. A mon avis, son expérience doit lui montrer que le fait de devoir créer des collections de collections est souvent lié a un problème de conception et que l'on peut certainement revoir l'application pour qu'elle soit écrite de manière problème.

    Au travers de mes propres expériences, j'ai également été confronté a ce genre de problème chez des développeur débutant. La création de collection de collections à très souvent été un moyen d'ecrire rapidement (mais pas très clairement) un bout de code qui aurait été plus clair en se donnant un peu plus de mal.

    Pour donner la meilleur solution a elisha, je pense qu'on devrait plus se pencher sur le contexte de son problème. Ceci dit, le principal est qu'elisha ait le choix dans les solutions possible.

    @elisha > Si tu as besoin de plus d'explication ou besoin d'aide suplémentaire n'hésite pas a redemander
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    donc d'après vous il faudrait que je repense à la façon de faire mon programme?
    [désolée pour cette longue absence !!]
    Elisha

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par elisha Voir le message
    donc d'après vous il faudrait que je repense à la façon de faire mon programme?
    [désolée pour cette longue absence !!]
    Elisha
    D'après moi, oui sans aucun doute.
    Montre nous ton cahier des charges et ton diagramme de classes si tu veux un peu d'aide

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    bon alors je ne sais pas si ça va marcher.....
    dites le moi .... c'est la première que j'envoi quelque chose

    merci de votre aide
    elisha
    Fichiers attachés Fichiers attachés

  13. #13
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    @Ikey, il faut aussi parfois sortir du monde industriel, les cahiers de charges ne sont pas formule courante chez tout le monde Et on remarque encore malheureusement souvent que certaines spécifications (quand il y en a...), certains algos, ou certains concepts sont vraiment bâclés au niveau industriel au profit du prix, quitte à se taper le triple en maintenance 10 ans plus tard
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par Tux++ Voir le message
    @Ikey, il faut aussi parfois sortir du monde industriel, les cahiers de charges ne sont pas formule courante chez tout le monde Et on remarque encore malheureusement souvent que certaines spécifications (quand il y en a...), certains algos, ou certains concepts sont vraiment bâclés au niveau industriel au profit du prix, quitte à se taper le triple en maintenance 10 ans plus tard
    Si je n'ai pas de cahier des charges je ne commence même pas à bosser. Sachant que j'utilise la méthode UP le client est obligé de participer. Etant donné que c'est gagnant/gagnant ils sont facile à convaincre.

    Pour revenir au sujet.
    Je ne comprends absolument rien à ce diagramme, il n'est pourtant pas grand.
    D'habitude je n'ai pas besoin d'explications, mais là il va falloir que tu m'expliques ce que doit faire le programme.

    Dans un diagramme de classes comme en programmation, tes classes ne sont pas obligées d'avoir que des types primitifs ou des objets du langage, tu peux utiliser tes propres types, c'est là qu'interviennent les aggrégations dans ton diagramme, parce que dans ce que tu as fait on ne voit pas du tout les relations entre les classes. Les flèches ne sont pas suffisantes.

    Si on traduit ca en java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Personne{
        int NumeroInscription;
        String Nom;
        String Prenom;
        ...
    }
    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
    public class Groupe{
        Hastable<int, Personne> groupe; 
        ...
        public Groupe()
        {
            ...
            groupe = new Hastable<int, Personne>();
            ...
        }
        ...
        public boolean ajouterPersonne(Personne personne)
        {
            ...
            if(groupe != null)
            {
                groupe.put(personne.getNumeroInscription(), personne)
            }
        }
        ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Voyage{
        Groupe inscrits;
        ...
    }
    Ce n'est qu'une proposition, étant donné que je ne sais pas précisément ce que tu veux faire.
    Ensuite il faut faire la même chose pour l'agence qui va avoir une collection de voyages.
    Au final ca donnera Agence de Voyage <- Liste de Voyages <- Voyage <- Groupe <- Personne.
    En pratique cette solution est très moyenne, puisque le problème est décomposé de manière linéaire, ca ne donnera rien de bon dans le code. Si tu veux récupérer le nom d'une Personne à partir de l'agence de voyage, c'est la porte ouverte au n'importe quoi.
    Personnellement j'associerais un voyage à une personne et non l'inverse.
    Comme ca tu aurais d'un côté les clients avec une propriété voyage par client -ou par groupe, il faut voir- et de l'autre les voyages.
    Je te laisse un peu chercher pour avoir un truc béton

    Un petit truc qui m'a aidé quand j'ai commencé, c'est de chercher comment mes données seraient stockées dans une base de données. Il faut juste faire attention de ne pas aller trop loin pour ne pas perdre tout le côté POO que n'a une base de donnée ralationnelle.

    Et si tu veux encore un peu d'aide on est toujours là!

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par @Ikey Voir le message
    Je ne comprends absolument rien à ce diagramme, il n'est pourtant pas grand.
    D'habitude je n'ai pas besoin d'explications, mais là il va falloir que tu m'expliques ce que doit faire le programme.
    Les flèches ne sont pas suffisantes.
    j'ai souri en lisant ça parce qu'en faite l'activité que je veux faire en java m'a été donnée par un étudiant en BTS IG... je me forme seule au java et j'avais besoin d'exercice donc il m'a passé ces TP.... donc ce qu'on leur apprends c'est pas terrible? ou c'est leur sujet qui est mal agencé?
    enfin...
    bon à partir de mardi j'aurais plus de temps pour me plonger dans mon projet... merci de votre aide ..

    elisha

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par elisha Voir le message
    j'ai souri en lisant ça parce qu'en faite l'activité que je veux faire en java m'a été donnée par un étudiant en BTS IG... je me forme seule au java et j'avais besoin d'exercice donc il m'a passé ces TP.... donc ce qu'on leur apprends c'est pas terrible? ou c'est leur sujet qui est mal agencé?
    enfin...
    bon à partir de mardi j'aurais plus de temps pour me plonger dans mon projet... merci de votre aide ..

    elisha
    Concernant le sujet je ne peux pas me prononcer puisque je ne l'ai pas vu. En revanche je sais que ce que tu m'as montré n'est pas un diagramme UML.
    Quelques classes et des flèches n'en font en rien de l'UML. La modélisation est un excellent moyen de communication entre le client, les développeurs, le chef de projets, les intégrateurs, etc. uniquement s'il est bien réalisé. Et pour qu'il le soit ca demande un gros boulot de conception. Ici je ne vois aucun boulot, aucune conception, rien qui puisse m'aider à retranscrire ça en un code source.

    Puis si des gars de BTS faisaient des choses utiles pendant 2 ans ca se serait
    Pour être plus sérieux, en BTS tu n'as qu'un aperçu d'un peu tout mais tu n'es en aucun cas spécialiste dans un domaine. A moins d'avoir programmer une dizaine d'année avant, ce n'est qu'en entreprise que tu apprends "comment on fait les choses". Mais là je m'éloigne du sujet. J'ai l'impression de toujours dévier, mais ca me semble important de commencer sur de bonnes bases.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    okok d'accord, bon aller je vais me chercher des bons cours de conception d'uml (et je reviendrais présenter un nouvel uml ... lol)... si tu as de bonnes références a me proposer .... merci !!!

    encore merci

    Elisha

Discussions similaires

  1. Ajouter des lignes aux collections de collections
    Par Helicoid dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/04/2014, 15h45
  2. [Débutant] Utilisation des collections (VisualBasic.Collection) en VB 2005
    Par bolylob dans le forum Framework .NET
    Réponses: 1
    Dernier message: 29/10/2013, 14h34
  3. Implémentation d'une collection de collection
    Par thomine dans le forum Hibernate
    Réponses: 7
    Dernier message: 21/03/2005, 09h24
  4. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

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