2010-01-27 30 views
5

En Java, ¿cómo se convierte una ArrayList en una matriz bidimensional Objeto [] []?Conversión de una ArrayList en una matriz 2D

De comentarios: Describiré el problema con más detalles: un archivo XML incluye una lista de contactos (por ejemplo, nombre, dirección ...). La única forma en que puedo obtener esta información es a través de ArrayList, que me será entregada. Como necesito almacenar el contenido de esta lista de arreglos en una tabla Java Swing de manera ordenada, estaba pensando en convertirlo en una matriz bidimensional de objetos

+0

lo que está en su lista? – pstanton

+0

una lista de arreglos es 1D, no entiendo lo que significa su pregunta –

+0

quizás el ArrayList contiene una lista de matrices de objetos ... – ninesided

Respuesta

1

he conseguido encontrar una "forma" para hacerlo, sabiendo el número de atributos cada uno de los contactos ha (6). Así que teniendo en cuenta 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

que le recomendará que su análisis sintáctico XML en objetos de Java y almacenar el objeto en un objeto de datos personalizado. Esto facilitará la realización de muchas operaciones en los datos disponibles.

Here es un pequeño tutorial sobre cómo hacerlo.

2

La forma más sencilla es añadir un método a la Contact así:

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

y utilizar de esta manera:

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

supongo que está utilizando el constructor JTable(Object[][], Object[]).

En lugar de convertir un ArrayList<Contact> en un , intente utilizar el constructor JTable(TableModel). Puede escribir una clase personalizada que implemente la interfaz TableModel. Sun ya proporcionó la clase AbstractTableModel para que pueda extender su vida un poco más.

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(); 
     // ... 
     } 
    } 

} 

Más tarde ...

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

Prueba esto:

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; 
} 
Cuestiones relacionadas