2010-01-27 179 views
5

在Java中,如何將ArrayList轉換爲二維數組Object [] []?將ArrayList轉換爲2D數組

來自評論:我會用更多的細節來描述你的問題:一個XML文件包含一個聯繫人列表(例如姓名,地址......)。我能獲得這些信息的唯一方法就是通過一個ArrayList,它會被髮給我。因爲我需要以有序的方式將此數組列表的內容存儲在Java Swing表中,所以我想將它轉換爲對象的二維數組。

+0

什麼在你的名單? – pstanton 2010-01-27 11:39:34

+0

數組列表是1D,我不明白你的問題意味着什麼 – 2010-01-27 11:44:33

+0

也許ArrayList包含一個Object數組列表... – ninesided 2010-01-27 11:47:06

回答

1

我設法找到「辦法」這樣做的,知道屬性的數量各的聯繫人(6)。所以考慮一個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

我會建議你分析你的XML轉換爲Java對象和對象存儲在一個自定義的數據對象。這將使您可以更輕鬆地對可用數據執行許多操作。

Here是如何做到這一點的小教程。

2

最簡單的方法是將一個方法添加到Contact這樣的:

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

,並使用它像這樣:

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

我相信你正在使用的JTable(Object[][], Object[])構造。

而不是將ArrayList<Contact>轉換爲Object[][],請嘗試使用JTable(TableModel)構造函數。您可以編寫一個實現TableModel界面的自定義類。 Sun已經爲您提供了AbstractTableModel課程,以延長您的生活。

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

} 

後來......

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

試試這個:

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