Transformer un ArrayList en tableau a 2 dimmension

hu -  
 Utilisateur anonyme -
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:
  • Transformer un ArrayList en tableau a 2 dimmension
  • Dimmension a5 - Guide

3 réponses

Utilisateur anonyme
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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
Utilisateur anonyme
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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