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 :

Boucler sur un index d'ArrayList simple


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Boucler sur un index d'ArrayList simple
    Bonjour à tous,

    comme vous allez le voir, j'ai un petit soucis d'Arraylist !

    Je me retrouve avec une ArrayList qui ne contient pas vraiment de type (car on ne sait pas ce qu'elle va nous retourner lorsqu'elle passe dans une certaine fonction).
    Je considère donc que mon ArrayList est de type Object.

    Lorsque je veux travailler avec celle-ci, l'index 0 doit être traité comme une "String", et le second index est un tableau de 100 items qui correspond au type "ZM_TAB_RENS_ITEM".

    Là où je bloque, c'est lorsque j'essaie d'extraire mon tableau.
    Je n'arrive pas à boucler sur le second index de l'ArrayList qui contient le tableau, puisque je n'ai pas pu déclarer mon ArrayList bidimensionnelle vu que la méthode me retourne une simple ArrayList de type Object.
    Il faut donc que j'arrive à boucler sur le 2nd index pour récupérer chaques items.

    Un petit schéma de mon ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <arraylist>
    	<index0> (traité comme String)
    	<index1> (traité comme ZM_TAB_RENS_ITEM)
    		<index0 du tableau <arraylist.index1> >
    		<index1 du tableau <arraylist.index1> >
    		<index2 du tableau <arraylist.index1> >
    		...
    		<index99 du tableau <arraylist.index1> >
    Savez-vous comment je peux boucler sur mon <index1> ?
    Merci d'avance !

    (PS : N'hésitez pas à me demander plus de détail si mon explication est trop brouillon !)

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    bonjour,
    comment ta fais , ta essayé de récupéré le tableau ?
    d'abord tu doit écrire le code qui ne marche pas pour que nous puissions t'aidé
    je pense que tu doit récupéré le tableau de l'index 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    montableau=arraylist.get(1);
    while(i<montableau.lenght()){
    // boucle sur montableau
     
    }

  3. #3
    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
    Euh, oui, mais un cast du tableau va forcément être nécessaire, puisque la List ne renvoie que des Object.

    ..... Et au passage, c'est n'importe quoi, ça : à l'index 0 une String, à l'index 1 un tableau... Bah non il fallait juste avoir une String ici et un tableau là, pas les mettre ensemble dans une List.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    J'ai en effet essayé d'assigner l'index dans un tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    item = linkage.get(1);
    while (i < item.length){
        ....
    }
    mais il me sort une erreur de compilation :
    "Type mismatch: cannot convert from Object to DATA_BLOCK.ZM_TAB_RENS.ZM_TAB_RENS_ITEM[]"

    Il me propose donc de faire un cast, mais celui-ci me fait une erreur à l'exécution :
    "Lcom.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM; cannot be cast to [Lcom.mypackage.ji_Amiable.DATA_BLOCK$ZM_TAB_RENS$ZM_TAB_RENS_ITEM;"

    @Thelvin :
    Je n'ai malheureusement pas le choix de travailler avec, la liste retournée est générée par le service externe monService.AMIABL83CHARGER_RDEF(data_block.getZM_NOM_DEF());

  5. #5
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Bon déjà j'aurai tendance à dire que tu fais des choses un peu étrange

    Mais bon pour répondre à ta question.

    Pour stocker les informations comme tu le fais tu es obligé de passer par une liste d'objet.

    ArrayList<Object> listObj;

    Toi tu sais que à l'index 1 tu as une liste de ZM_TAB_RENS_ITEM ( au passage essais de respecter les conventions de nommage ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<ZM_TAB_RENS_ITEM> list = (ArrayList<ZM_TAB_RENS_ITEM>)listObj.get(1);
    Ici il te faut caster le resultat pour que le compilo soit sur que tu travaille bien sur une liste dans le bon type.

    Ensuite tu n'as plus qu'a boucler dessus comme pour n'importe quel liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Iterator iter = list.iterator();
    while(iter.hasNext()){
      Obecjt o = iter.next();
    }

  6. #6
    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
    Citation Envoyé par Sprism Voir le message
    Il me propose donc de faire un cast, mais celui-ci me fait une erreur à l'exécution :
    "Lcom.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM; cannot be cast to [Lcom.mypackage.ji_Amiable.DATA_BLOCK$ZM_TAB_RENS$ZM_TAB_RENS_ITEM;"
    Ce message parle de deux classes qui portent le même nom mais qui ne sont pas au même endroit. Il dit que le cast que tu fais ne convertit pas vers la bonne.
    Edit : Ah, et comme dit tchize_, que l'objet contenu dans la List n'est pas un tableau, aussi, effectivement...

    Citation Envoyé par Sprism Voir le message
    Je n'ai malheureusement pas le choix de travailler avec, la liste retournée est générée par le service externe monService.AMIABL83CHARGER_RDEF(data_block.getZM_NOM_DEF());
    Eh bien si quelqu'un lit ça et se demande si c'est malin qu'un service externe fasse ça, il saura que non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Sprism Voir le message

    Il me propose donc de faire un cast, mais celui-ci me fait une erreur à l'exécution :
    "Lcom.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM; cannot be cast to [Lcom.mypackage.ji_Amiable.DATA_BLOCK$ZM_TAB_RENS$ZM_TAB_RENS_ITEM;"
    Cette erreur te dit que, là ou tu pensais avoir un tableau de ZM_TAB_RENS_ITEM, en réalité tu as un seul ZM_TAB_RENS_ITEM. De plus, les classes ne correspondent pas.

    Dans ton index 1 du la List tu as un seul élément de type
    "com.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM"
    dans ton code tu as écrit que tu attendais un tableau de
    "com.mypackage.ji_Amiable.DATA_BLOCK$ZM_TAB_RENS$ZM_TAB_RENS_ITEM"

    Donc les classes ne sont même pas les même. visiblement, tu as dans ton code, deux classes "ZM_TAB_RENS_ITEM" différentes et tu es occupé de les confondres.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci pour toutes vos réponses ! Et oui, je sais que le code est brouillon, mais je m'adapte au service

    J'ai réussi à récupérer une "liste" d'objet contenu dans linkage.get(1) avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object item = linkage.get(1);
    dans laquelle chaque index contient un variable String.

    Mais ce que je ne comprend pas, c'est que lorsque j'affiche le contenu de "item" en debug, il m'affiche comme un tableau :


    Et je ne peux pas déclarer "item" comme tableau.
    Une idée de comment je pourrais l'exploiter ?

  9. #9
    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
    Citation Envoyé par Sprism Voir le message
    Mais ce que je ne comprend pas, c'est que lorsque j'affiche le contenu de "item" en debug, il m'affiche comme un tableau :
    Laisse tomber, t'as juste dû foirer le copier/coller du message d'erreur.

    Par contre, ce message dit clairement qu'il existe deux classes de ce nom, mais pas au même endroit. Et que tu n'as pas cast vers la bonne.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Laisse tomber, t'as juste dû foirer le copier/coller du message d'erreur.
    Comment ca ? J'ai juste affiché le contenu de la variable "item"

    Après pour les 2 classes, y'en a effectivement deux distinctes (celle gérée par le service, et celle que j'utilise pour la récupérer).

  11. #11
    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
    Je parle du message d'erreur, pas de l'image. Tu l'as sûrement mal copié/collé. C'est bien un tableau.

    Citation Envoyé par Sprism Voir le message
    Après pour les 2 classes, y'en a effectivement deux distinctes (celle gérée par le service, et celle que j'utilise pour la récupérer).
    Eh bah il faut cast vers la bonne, pas la mauvaise.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    D'accord, j'ai donc changé mon cast en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object item = (com.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM) linkage.get(1);
    Et le message d'erreur devient ..... :
    "[Lcom.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM; cannot be cast to com.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM"

    Aucune idée de ce qu'est ce [Lcom.mypackage ...

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le [L avant le nom de classe indique que c'est un tableau

    donc dans ton cas, ce cast devrais passer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM[] item = (com.mypackage.ji_Amiable.ZM_TAB_RENS_ITEM[]) linkage.get(1);
    Maintenant, vu le message précédent, je me demande si tu ne serais pas dans uen boucle à plus haut niveau et que, parfois, à l'index 1 tu a un tableau, parfois un seul élément?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ouiiiiiiiiiiiiiiiiiiiiiii Merci infiniment tchize_, ca fonctionne !

    Tu as vu juste, mais cette boucle se fait justement dans le service extérieur que j'appelle juste avant Et donc je ne connais pas forcément le contenu à l'avance !

    Encore merci !

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

Discussions similaires

  1. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15
  2. boucler sur des checkboxes
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 09/10/2004, 08h27
  3. Questions sur les indexations
    Par freud dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/05/2004, 11h38
  4. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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