Transformer un ArrayList en tableau a 2 dimmension

Fermé
hu - 17 avril 2013 à 13:08
 Utilisateur anonyme - 19 avril 2013 à 08:00
Bonjour;

Comme l'indique le titre, j'aimerais mettre le contenu d'une liste dans un tableau a deux dimension. Quelqu'un connait il une méthode pour le faire.
A voir également:

3 réponses

Utilisateur anonyme
17 avril 2013 à 13:12
salut !
il faudra un peu plus de détails, comme par exemple qu'y a t'il dans ta liste ? que veux tu comme résultats ? car sans ca la question n'a pas vraiment de sens.

naga
0
hullu Messages postés 5 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 19 avril 2013
Modifié par hullu le 17/04/2013 à 14:19
Salut,

Merci de ta réponse

ma list contient des objets que je voudrais placer dans un tableau a 2 dimensions. ceci dans le but de pouvoir les afficher dans une JTable.
0
Utilisateur anonyme
17 avril 2013 à 14:39
le problème reste le même ... mais supposons que ton arrayList nommé 'a' contient, pour chaque ligne, un type string[] (de 2 éléments)

string tab[][] = string int[a.size()][2]; 
for (int i = 0; i < a.size(); i++) {
    tab[i][0] = a.get(i)[0];
    tab[i][0] = a.get(i)[1];
}


(j'ai un doute entre le size et le count, ca fait pas mal de temps que j'ai pas touché au java =p)

Je sais pas si c'est exactement ce que tu veux mais le principe devrait être le m^me
0
hullu Messages postés 5 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 19 avril 2013
Modifié par hullu le 17/04/2013 à 14:48
Encore merci.

Voici le code auquel j'avais pensé mais celui ci lève une NullPointerException.

private static Object data[][];

private static ArrayList<LigneDeCommande> listeDeToutesLesLignes = new ArrayList<>();

public static void convertArrayToTab() {
int i = 0;
System.out.println(listeDeToutesLesLignes.size());
while(i < listeDeToutesLesLignes.size()){
data[i][0] = listeDeToutesLesLignes.get(i).getDesignation();
data[i][1] = listeDeToutesLesLignes.get(i).getReference();
data[i][2] = listeDeToutesLesLignes.get(i).getQuantité();
data[i][3] = listeDeToutesLesLignes.get(i).getPrixUnitaire();
data[i][4] = listeDeToutesLesLignes.get(i).getTotalLigne();
data[i][5] = listeDeToutesLesLignes.get(i).isCommande();
data[i][6] = listeDeToutesLesLignes.get(i).isRecu();
i = i++;
}
}
0
que quelqu'un me fouette si je me trompe, mais il me semble que déclarer un 'static' ne te permet pas de l'éditer ensuite ... essaye sans (si ca pose bien problème, je pense que ca sera pareil pour ton arraylist). de même, tu n'as pas de new sur ton data .

ensuite tu fais i = i++
fais plutot i++ tout simplement pour l'icrémenter.
essaye donc :


private Object data[][];  

private ArrayList<LigneDeCommande> listeDeToutesLesLignes = new ArrayList<>();  

public static void convertArrayToTab()  
{  
 data = new string[listeDeToutesLesLignes.size()][7];   
 int i = 0;  
 System.out.println(listeDeToutesLesLignes.size());  
 while(i < listeDeToutesLesLignes.size()) 
 {  
  data[i][0] = listeDeToutesLesLignes.get(i).getDesignation();  
  data[i][1] = listeDeToutesLesLignes.get(i).getReference();  
  data[i][2] = listeDeToutesLesLignes.get(i).getQuantité();  
  data[i][3] = listeDeToutesLesLignes.get(i).getPrixUnitaire();  
  data[i][4] = listeDeToutesLesLignes.get(i).getTotalLigne();  
  data[i][5] = listeDeToutesLesLignes.get(i).isCommande();  
  data[i][6] = listeDeToutesLesLignes.get(i).isRecu();  
  i++;  
 }  
} 
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 avril 2013 à 18:45
"que quelqu'un me fouette si je me trompe, mais il me semble que déclarer un 'static' ne te permet pas de l'éditer ensuite"
Et un coup de fouet pour nagashima ^^

"static" n'empêche pas du tout l'édition, peut-être confonds-tu avec "final", même si l'édition reste malgré tout possible (c'est la réutilisation d'une référence pour plusieurs objets qui est interdit)
"static" permet de différencier les méthodes qui s'appliquent à la classe et sont donc partagées par tous les objets, des méthodes non "static" qui elles s'utilisent sur un objet en utilisant ses données.
Par contre il faut être cohérent, soit tout est static et il n'y a aucun objet (et donc pas de données, sauf des données partagées), soit rien n'est static parce que ça s'applique à un seul et même objet (et donc aux même données). Si on mélange les deux il faut préciser dans les méthodes static de quel objet (quelles données) on parle...

Ici, le NullPointerException vient tout simplement du fait que data n'a pas de valeur (il vaut donc null par défaut), il faut appeler un constructeur, permettant entre autre de lui donner une taille.
Donc "data = new string[listeDeToutesLesLignes.size()][7];" pourrait faire l'affaire, sauf qu'ici il ne s'agit pas de "string" mais d'Object puisqu'il y a un peu de tout dans les lignes.

Par contre, l'utilisation de ton tableau data déclaré en membre (static qui plus est) me parait maladroit, il vaudrait mieux je pense faire une méthode static qui manipule une liste en entrée, et renvoie ton tableau en retour, quitte à avoir un membre qui s'appelle effectivement data dans tes objets et que tu utilises pour récupérer le résultat. Mais si tu utilises toujours le même tableau static, à chaque fois que tu feras appel à la méthode tu vas reprendre le même tableau et modifier sa valeur, ce qui va poser problème.

Voici comment moi je ferais :

public static Object[] lineToArray(LigneDeCommande ligne)
{
    return new Object[] { ligne.getReference(), ligne.getQuantité(), ligne.getPrixUnitaire(), ligne.getTotalLigne(), ligne.isCommande(), ligne.isRecu() };
}

public static Object[][] listToArray(ArrayList<LigneDeCommande> liste)  
{
    Object[][] array = new Object[liste.size()][];
    
    int i=0;
    for (LigneDeCommande ligne : liste)
        array[i++] = ligneToArray(ligne);
    
    return data;
}

// ...

Object[][] data = listToArray(listeDeToutesLesLignes);
0
hullu Messages postés 5 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 19 avril 2013
18 avril 2013 à 09:26
Merci pour toutes vos réponses, j'y réfléchi et vous donne des nouvelles
0
hullu Messages postés 5 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 19 avril 2013
18 avril 2013 à 09:48
Comme le suggérait KX, j'ai créé une classe qui étend AbstractTabelModele afin de pouvoir utiliser ma liste a la place d'un tableau.

Pour l'instant ça a l'aire de fonctionner. Mais il y a encore du boulot.

Encore merci pour vos lumières.
0