2010-01-27 132 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; 
}