簡體   English   中英

將ArrayList轉換為2D數組

[英]Converting an ArrayList into a 2D Array

在Java中如何將ArrayList轉換為二維數組Object [] []?

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

我假設您正在使用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);

簡單的方法是向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();
}

嘗試這個:

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

我知道每個聯系人擁有的屬性數量,我設法找到“一種方法”(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());
        }
    }

你真正想要的是對ArrayList進行排序。 為此,您的Contacts類必須實現Comparator方法。

查看下一頁的示例: http//www.java-examples.com/sort-java-arraylist-descending-order-using-comparator-example

我建議您將XML解析為java對象,並將對象存儲在自定義數據對象中。 這將使您更容易對可用數據執行許多操作。

是關於如何做的小教程。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM