views:

890

answers:

5

In Java how do you convert a ArrayList into a two dimensional array Object[][]?

From comments: I will describe you the problem with more details: an XML file includes a list of contacts (e.g. name, address...). The only way I can obtain this information is through an ArrayList, which will be given to me. As I need to store the content of this array list in a Java Swing table in an ordered manner, I was thinking to convert it into a two dimensional array of objects

A: 

What you really want is to sort the ArrayList. To do that your Contacts class must implement a Comparator method.

Check the next page for an example: http://www.java-examples.com/sort-java-arraylist-descending-order-using-comparator-example

Carlos Tasada
A: 

I will recommend that you parse your XML into java objects and store the object in a custom data object. This will make it easier for you to do many operations on the available data.

Here is small tutorial on how to do it.

Ravi Gupta
A: 

The simple way is to add a method to the Contact like this:

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

and use it like this:

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

I presume you are using the JTable(Object[][], Object[]) constructor.

Instead of converting an ArrayList<Contact> into an Object[][], try using the JTable(TableModel) constructor. You can write a custom class that implements the TableModel interface. Sun has already provided the AbstractTableModel class for you to extend to make your life a little easier.

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

}

Later on...

List<Contact> contacts = ...;
TableModel tableModel = new ContactTableModel(contacts);
JTable table = new JTable(tableModel);
Adam Paynter
A: 

I managed to find "a way" to do so, knowing the number of attributes each contacts has (6). So considering an 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());
        }
    }

thanks for the help

Tony