2010-01-27 7 views
5

En Java, comment convertir une ArrayList en un tableau bidimensionnel Object [] []? De commentaires: Je vais vous décrire le problème avec plus de détails: un fichier XML comprend une liste de contacts (par exemple, le nom, l'adresse ...). La seule façon dont je peux obtenir cette information est à travers une ArrayList, qui me sera donnée. Comme j'ai besoin de stocker le contenu de cette liste dans une table Java Swing d'une manière ordonnée, je pensais la convertir en un tableau bidimensionnel d'objetsConversion d'une ArrayList en une Array 2D

+0

ce qui est dans votre liste? – pstanton

+0

une liste de tableau est 1D, je ne comprends pas ce que votre question signifie –

+0

peut-être la ArrayList contient une liste de tableaux d'objets ... – ninesided

Répondre

1

j'ai réussi à trouver "un moyen" de le faire, de connaître le nombre d'attributs chacun des contacts a (6). Si l'on considère un ArrayList listofContacts

int numberOfContacts = listofContacts.size()/6; 
    Object[][] newArrayContent = new Object[numberOfContacts][6]; 

    for(int x = 0; x<numberOfContacts; x++){ 
     for(int z = 0; z < 6; z++){ 
     int y = 6 * x; 
     newArrayContent [x][z] = list.get(y+z); 
     System.out.println(newArrayContent [x][z].toString()); 
     } 
    } 
0

Je recommande que vous analysez votre XML en objets java et stocker l'objet dans un objet de données personnalisées. Cela vous aidera à effectuer de nombreuses opérations sur les données disponibles.

Here est un petit tutoriel sur la façon de le faire.

2

La façon simple est d'ajouter une méthode à la Contact comme ceci:

public Object[] toObjectArray() { 
    return new Object[] { getName(), getAddress, /* ... */ }; 
} 

et l'utiliser comme ceci:

ArrayList<Contact> contacts = /* ... */ 
Object[][] table = new Object[contacts.size()][]; 
for (int i = 0; i < contacts.size(); i++) { 
    table[i] = contacts.get(i).toObjectArray(); 
} 
8

Je suppose que vous utilisez le constructeur JTable(Object[][], Object[]). Au lieu de convertir ArrayList<Contact> en Object[][], essayez d'utiliser le constructeur JTable(TableModel). Vous pouvez écrire une classe personnalisée qui implémente l'interface TableModel. Sun vous a déjà fourni la classe AbstractTableModel pour vous permettre de vous simplifier la vie.

public class ContactTableModel extends AbstractTableModel { 

    private List<Contact> contacts; 

    public ContactTableModel(List<Contact> contacts) { 
     this.contacts = contacts; 
    } 

    public int getColumnCount() { 
     // return however many columns you want 
    } 

    public int getRowCount() { 
     return contacts.size(); 
    } 

    public String getColumnName(int columnIndex) { 
     switch (columnIndex) { 
     case 0: return "Name"; 
     case 1: return "Age"; 
     case 2: return "Telephone"; 
     // ... 
     } 
    } 

    public Object getValueAt(int rowIndex, int columnIndex) { 
     Contact contact = contacts.get(rowIndex); 

     switch (columnIndex) { 
     case 0: return contact.getName(); 
     case 1: return contact.getAge(); 
     case 2: return contact.getTelephone(); 
     // ... 
     } 
    } 

} 

Plus tard ...

List<Contact> contacts = ...; 
TableModel tableModel = new ContactTableModel(contacts); 
JTable table = new JTable(tableModel); 
2

Essayez ceci:

ArrayList<Integer> list = new ArrayList<Integer>(); 
list.add(..); 
list.add(..); 
list.add(..); 
list.add(..); 
list.add(..); 
list.add(..); 
int[][] a = new int[list.size()][list.size()]; 
    for(int i =0; i < list.size(); i++){ 
     for(int j =0; j <list.size(); j++){ 
     a[i][j]= list.get(j +(list.size() * i)); 
     } 
    } 
0
public static String[][] convertListIntoArrayObj(List<TeamMenuSelected> possibilities) { 
    int numberOfColums = 2; 
    int numberOfRows = possibilities.size(); 
    String[][] values = new String[numberOfRows][numberOfColums]; 

    for(int x=0; x<possibilities.size(); x++) { 
     TeamMenuSelected item = possibilities.get(x); 
     values[x][0] = item.getTeamName(); 
     values[x][1] = item.getTeamCuisine(); 
    } 

    return values; 
}