将ArrayList转换为2D数组

7
在Java中,如何将ArrayList转换为二维数组Object[][]?
从评论中可以看出,问题的具体情况是:一个XML文件包含联系人列表(例如,姓名、地址等)。我唯一能获取这些信息的方式是通过一个ArrayList,它将被提供给我。由于我需要以有序的方式将此数组列表的内容存储在Java Swing表中,因此我考虑将其转换为对象的二维数组。

一个数组列表是一维的,我不明白你的问题是什么意思。 - Valentin Rocher
也许 ArrayList 包含了一个对象数组的列表... - ninesided
我将向您更详细地描述问题:一个XML文件包含联系人列表(例如姓名、地址等)。我能够获取这些信息的唯一方式是通过一个ArrayList<Contacts>,这个列表将会被提供给我。由于我需要以有序的方式将此数组列表的内容存储在表格中,所以我考虑将其转换为一个二维对象数组... - Anto
2
什么样的表格?数据库表格?Swing JTable?HTML 表格? - pstanton
8个回答

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

}

Later on...

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

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

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
 ArrayList<String> arrayList = new ArrayList<String>();
    arrayList.add("element_1");
    arrayList.add("element_2");
    arrayList.add("element_3");
    arrayList.add("element_4");
    int k=0;
    int row = 2, col = 2;
    Object[][] objArray = new Object[row][col];
     for(int i = 0 ; i < row; i++) {
         for(int j = 0; j < col; j++) {
                 objArray[i][j] = arrayList.get(k);
                 k++;
                 if(k > arrayList.size()) {
                     break;
                 }
         }
     }
     for(int i = 0 ; i < row; i++) {
         for(int j = 0; j < col; j++) {

             System.out.println("Row no "+i+" col no "+j+" "+objArray[i][j] );
         }
  }
 }

以上是将您的ArrayList<string>转换为2D数组的方法。我已经将ArrayList<string>转换为2D对象。要将其转换为2D字符串或2D数组,只需使用String[][]替换上面的代码以获取2D字符串,使用Array[][]替换以获取2D数组。 - Iyush
1
你应该在答案中写下解释,而不是在评论中写下解释。 - saurav

0

0
我建议您将XML解析为Java对象,并将对象存储在自定义数据对象中。这样做可以使您更轻松地对可用数据执行许多操作。 这里有一个简短的教程,介绍如何实现这一点。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接